[copr] master: Fix the current tests for new way of chroots handling (849470b)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 849470b1080b51f0e5cc617719051110e817b017
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Tue Jan 15 08:14:23 2013 +0100
Fix the current tests for new way of chroots handling
>---------------------------------------------------------------
coprs_frontend/tests/coprs_test_case.py | 34 ++++++++++++++++---
.../tests/test_views/test_coprs_ns/test_general.py | 4 +-
2 files changed, 30 insertions(+), 8 deletions(-)
diff --git a/coprs_frontend/tests/coprs_test_case.py b/coprs_frontend/tests/coprs_test_case.py
index c60cd6f..bae7b73 100644
--- a/coprs_frontend/tests/coprs_test_case.py
+++ b/coprs_frontend/tests/coprs_test_case.py
@@ -45,19 +45,41 @@ class CoprsTestCase(object):
@pytest.fixture
def f_coprs(self):
- self.c1 = models.Copr(name = 'foocopr', chroots = 'fedora-18-x86_64', owner = self.u1)
- self.c2 = models.Copr(name = 'foocopr', chroots = 'fedora-17-x86_64 fedora-17-i386', owner = self.u2)
- self.c3 = models.Copr(name = 'barcopr', chroots = 'fedora-rawhide-i386', owner = self.u2)
+ self.c1 = models.Copr(name = 'foocopr', owner = self.u1)
+ self.c2 = models.Copr(name = 'foocopr', owner = self.u2)
+ self.c3 = models.Copr(name = 'barcopr', owner = self.u2)
self.db.session.add_all([self.c1, self.c2, self.c3])
self.db.session.commit()
@pytest.fixture
+ def f_mock_chroots(self):
+ self.mc1 = models.MockChroot(os_release='fedora', os_version='18', arch='x86_64')
+ self.mc2 = models.MockChroot(os_release='fedora', os_version='17', arch='x86_64')
+ self.mc3 = models.MockChroot(os_release='fedora', os_version='17', arch='i386')
+ self.mc4 = models.MockChroot(os_release='fedora', os_version='rawhide', arch='i386')
+
+ cc1 = models.CoprChroot()
+ cc1.mock_chroot = self.mc1
+ self.c1.copr_chroots.append(cc1)
+
+ cc2 = models.CoprChroot()
+ cc2.mock_chroot = self.mc2
+ cc3 = models.CoprChroot()
+ cc3.mock_chroot = self.m3
+ self.c2.copr_chroots.append(cc2)
+ self.c2.copr_chroots.append(cc3)
+
+ cc4 = models.CoprChroots()
+ cc4.mock_chroot = self.mc4
+ self.c4.copr_chroots.append(cc4)
+
+ @pytest.fixture
def f_builds(self):
- self.b1 = models.Build(copr = self.c1, user = self.u1, chroots = self.c1.chroots, submitted_on = 50, started_on = 100)
+ self.b1 = models.Build(copr = self.c1, user = self.u1, chroots = 'fedora-18-x86_64', 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)
+ self.b3 = models.Build(copr = self.c2, user = self.u2, chroots = 'fedora-17-x86_64 fedora-17-i386', submitted_on = 10)
+ self.b4 = models.Build(copr = self.c2, user = self.u2, chroots = 'fedora-17-x86_64 fedora-17-i386', submitted_on = 100)
self.db.session.add_all([self.b1, self.b2, self.b3, self.b4])
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 e15b105..ac87e44 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
@@ -217,7 +217,7 @@ class TestCoprUpdate(CoprsTestCase):
self.db.session.add_all([self.u1, self.c1])
r = c.post('/coprs/detail/{0}/{1}/update/'.format(self.u1.name, self.c1.name),
- data = {'name': self.c1.name, 'release': self.c1.release, 'arches': self.c1.arches, 'id': self.c1.id},
+ data = {'name': self.c1.name, 'fedora-18-x86_64': 'y', 'id': self.c1.id},
follow_redirects = True)
assert 'Copr was updated successfully' in r.data
@@ -228,7 +228,7 @@ class TestCoprUpdate(CoprsTestCase):
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},
+ data = {'name': self.c3.name, 'fedora-rawhide-i386': 'y', 'id': self.c3.id},
follow_redirects = True)
assert 'Copr was updated successfully' in r.data
11 years, 3 months
[copr] master: Forgotten noncommited line... (528db20)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 528db200aa6ac1357b9af71258a6775cd9d5d886
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Tue Jan 15 08:13:35 2013 +0100
Forgotten noncommited line...
>---------------------------------------------------------------
.../coprs/views/coprs_ns/coprs_general.py | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/coprs_frontend/coprs/views/coprs_ns/coprs_general.py b/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
index 70d2ac6..c377e6a 100644
--- a/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
+++ b/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
@@ -71,6 +71,7 @@ def copr_new():
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
11 years, 3 months
[copr] master: Fix the chroots saving for builds, keep using string for build chroots for now (bd45cd4)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit bd45cd4964c92dcf4abb5aa1ae4759f1e2af302c
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Mon Jan 14 15:47:40 2013 +0100
Fix the chroots saving for builds, keep using string for build chroots for now
>---------------------------------------------------------------
.../coprs/views/coprs_ns/coprs_builds.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py b/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
index 5f65321..0027b3b 100644
--- a/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
+++ b/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
@@ -40,7 +40,7 @@ def copr_add_build(username, coprname):
if form.validate_on_submit() and flask.g.user.can_build_in(copr):
build = models.Build(pkgs = form.pkgs.data.replace('\n', ' '),
copr = copr,
- chroots = copr.chroots,
+ chroots = ' '.join(map(lambda x: x.chroot_name, copr.mock_chroots)),
repos = copr.repos,
user = flask.g.user,
submitted_on = int(time.time()))
11 years, 3 months
[copr] master: Adapt the views to work with new chroots logic (67fc282)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 67fc282d75a059cb6b26b29c8755ef1a2fba19eb
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Mon Jan 14 14:48:33 2013 +0100
Adapt the views to work with new chroots logic
>---------------------------------------------------------------
.../coprs/views/coprs_ns/coprs_general.py | 17 ++++++++---------
1 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/coprs_frontend/coprs/views/coprs_ns/coprs_general.py b/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
index 73ac8e7..70d2ac6 100644
--- a/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
+++ b/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
@@ -48,7 +48,7 @@ def coprs_by_allowed(username = None, page = 1):
@coprs_ns.route('/add/')
@login_required
def copr_add():
- form = forms.CoprForm()
+ form = forms.CoprFormFactory.create_form_cls()()
return flask.render_template('coprs/add.html', form = form)
@@ -56,21 +56,20 @@ def copr_add():
@coprs_ns.route('/new/', methods=['POST'])
@login_required
def copr_new():
- form = forms.CoprForm()
+ form = forms.CoprFormFactory.create_form_cls()()
if form.validate_on_submit():
copr = models.Copr(name = form.name.data,
- chroots = ' '.join(form.chroots),
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()
flask.flash('New copr was successfully created.')
if form.initial_pkgs.data:
build = models.Build(pkgs = form.initial_pkgs.data.replace('\n', ' '),
copr = copr,
- chroots = copr.chroots,
repos = copr.repos,
user = flask.g.user,
submitted_on = int(time.time()))
@@ -128,17 +127,17 @@ def copr_edit(username, coprname):
if not copr:
return page_not_found('Copr with name {0} does not exist.'.format(coprname))
- form = forms.CoprForm(obj = copr)
+ form = forms.CoprFormFactory.create_form_cls(copr.mock_chroots)(obj=copr)
return flask.render_template('coprs/edit.html',
- copr = copr,
- form = form)
+ copr=copr,
+ form=form)
@coprs_ns.route('/detail/<username>/<coprname>/update/', methods = ['POST'])
@login_required
def copr_update(username, coprname):
- form = forms.CoprForm()
+ form = forms.CoprFormFactory.create_form_cls()()
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):
@@ -148,8 +147,8 @@ def copr_update(username, coprname):
if form.validate_on_submit():
# we don't change owner (yet)
copr.name = form.name.data
- copr.chroots = ' '.join(form.chroots)
copr.repos = form.repos.data.replace('\n', ' ')
+ coprs_logic.CoprChrootLogic.update_from_names(flask.g.user, copr, form.selected_chroots)
coprs_logic.CoprsLogic.update(flask.g.user, copr, check_for_duplicates = False) # form validation checks for duplicates
db.session.commit()
11 years, 3 months
[copr] master: Fix displaying copr chroots in copr detail (d397d38)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit d397d38056f1a3e34001523c61f20bbe155d9c37
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Mon Jan 14 14:48:04 2013 +0100
Fix displaying copr chroots in copr detail
>---------------------------------------------------------------
coprs_frontend/coprs/templates/coprs/detail.html | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/coprs_frontend/coprs/templates/coprs/detail.html b/coprs_frontend/coprs/templates/coprs/detail.html
index 72db33c..e895973 100644
--- a/coprs_frontend/coprs/templates/coprs/detail.html
+++ b/coprs_frontend/coprs/templates/coprs/detail.html
@@ -9,8 +9,8 @@
{% block body %}
<h3>chroots</h3>
<ul class=chroots-list>
- {% for chroot in copr.chroots_list %}
- <li>{{ chroot }}</li>
+ {% for mock_chroot in copr.mock_chroots %}
+ <li>{{ mock_chroot.chroot_name }}</li>
{% endfor %}
</ul>
{% if copr.repos %}
11 years, 3 months
[copr] master: Alter the copr form to accomodate arbitrary chroots (91053bd)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 91053bd647035a3b63ece460eec00be2cd5c8e9c
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Mon Jan 14 14:47:44 2013 +0100
Alter the copr form to accomodate arbitrary chroots
>---------------------------------------------------------------
.../coprs/templates/coprs/_coprs_forms.html | 14 ++++++++++++--
1 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/coprs_frontend/coprs/templates/coprs/_coprs_forms.html b/coprs_frontend/coprs/templates/coprs/_coprs_forms.html
index e29060f..7b90310 100644
--- a/coprs_frontend/coprs/templates/coprs/_coprs_forms.html
+++ b/coprs_frontend/coprs/templates/coprs/_coprs_forms.html
@@ -7,8 +7,18 @@
{{ form.csrf_token }}
{{ render_field(form.id, hidden = True) }}
{{ render_field(form.name) }}
- {{ render_field(form.release) }}
- {{ render_field(form.arches, size = 2) }}
+ {% for group_set, chs in form.chroots_sets.items() %}
+ <table style="display:inline;">
+ <tr>
+ <th colspan=2>Chroots to use</th>
+ </tr>
+ {% for ch in chs %}
+ <tr>
+ <td>{{ form|attr(ch)|attr('label') }}</td><td>{{ form|attr(ch) }}</td>
+ </tr>
+ {% endfor %}
+ </table>
+ {% endfor %}
{{ render_field(form.repos, rows = 10, cols = 50) }}
{% if copr is none %}{# we're creating the copr, so display initial builds area #}
{{ render_field(form.initial_pkgs, rows = 10, cols = 50) }}
11 years, 3 months
[copr] master: One more backref name fix (533230d)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 533230d92bb20e1dfefff0a82f4b206267e838dc
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Mon Jan 14 14:46:58 2013 +0100
One more backref name fix
>---------------------------------------------------------------
coprs_frontend/coprs/models.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/coprs_frontend/coprs/models.py b/coprs_frontend/coprs/models.py
index 2658f7c..9e2a67b 100644
--- a/coprs_frontend/coprs/models.py
+++ b/coprs_frontend/coprs/models.py
@@ -196,6 +196,6 @@ class MockChroot(db.Model, Serializer):
class CoprChroot(db.Model, Serializer):
mock_chroot_id = db.Column(db.Integer, db.ForeignKey('mock_chroot.id'), primary_key = True)
- mock_chroot = db.relationship('MockChroot', backref = db.backref('coprs'))
+ mock_chroot = db.relationship('MockChroot', backref = db.backref('copr_chroots'))
copr_id = db.Column(db.Integer, db.ForeignKey('copr.id'), primary_key = True)
copr = db.relationship('Copr', backref = db.backref('copr_chroots'))
11 years, 3 months
[copr] master: Add some login for manipulating the mock chroots (65d894a)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 65d894a8c4b35f7a183374e7ea344a8226a75164
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Mon Jan 14 14:46:37 2013 +0100
Add some login for manipulating the mock chroots
>---------------------------------------------------------------
coprs_frontend/coprs/logic/coprs_logic.py | 35 +++++++++++++++++++++++++++++
1 files changed, 35 insertions(+), 0 deletions(-)
diff --git a/coprs_frontend/coprs/logic/coprs_logic.py b/coprs_frontend/coprs/logic/coprs_logic.py
index cc47c1e..45ea492 100644
--- a/coprs_frontend/coprs/logic/coprs_logic.py
+++ b/coprs_frontend/coprs/logic/coprs_logic.py
@@ -104,3 +104,38 @@ class CoprsPermissionLogic(object):
@classmethod
def delete(cls, user, copr_permission):
db.session.delete(copr_permission)
+
+class CoprChrootLogic(object):
+ @classmethod
+ def mock_chroots_from_names(cls, user, names):
+ db_chroots = models.MockChroot.query.all()
+ mock_chroots = []
+ for ch in db_chroots:
+ if ch.chroot_name in names:
+ mock_chroots.append(ch)
+
+ return mock_chroots
+
+ @classmethod
+ def new(cls, user, mock_chroot):
+ db.session.add(mock_chroot)
+
+ @classmethod
+ def new_from_names(cls, user, copr, names):
+ for mock_chroot in cls.mock_chroots_from_names(user, names):
+ db.session.add(models.CoprChroot(copr=copr, mock_chroot=mock_chroot))
+
+ @classmethod
+ def update_from_names(cls, user, copr, names):
+ current_chroots = copr.mock_chroots
+ new_chroots = cls.mock_chroots_from_names(user, names)
+ # add non-existing
+ for mock_chroot in new_chroots:
+ if mock_chroot not in current_chroots:
+ db.session.add(models.CoprChroot(copr=copr, mock_chroot=mock_chroot))
+ # delete no more present
+ for mock_chroot in current_chroots:
+ if mock_chroot not in new_chroots:
+ models.CoprChroot.query.filter(models.CoprChroot.copr_id==copr.id).\
+ filter(models.CoprChroot.mock_chroot_id==mock_chroot.id).\
+ delete()
11 years, 3 months
[copr] master: Use a factory for copr forms to generate the chroots dynamically from DB. (d4837c3)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit d4837c37d42fda3773d1fc2f49ae5d7d629e43d2
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Mon Jan 14 14:45:59 2013 +0100
Use a factory for copr forms to generate the chroots dynamically from DB.
>---------------------------------------------------------------
coprs_frontend/coprs/forms.py | 77 +++++++++++++++++++++-------------------
1 files changed, 40 insertions(+), 37 deletions(-)
diff --git a/coprs_frontend/coprs/forms.py b/coprs_frontend/coprs/forms.py
index 461e7c0..3a8fc59 100644
--- a/coprs_frontend/coprs/forms.py
+++ b/coprs_frontend/coprs/forms.py
@@ -34,19 +34,6 @@ class UrlListValidator(object):
return is_url
-class AllowedArchesValidator(object):
- def __init__(self, message = None):
- if not message:
- message = '"{0}" is not an allowed architecture for "{1}".'
- self.message = message
-
- def __call__(self, form, field):
- arches = field.data
- for a in arches:
- if a not in constants.CHROOTS[form.release.data]:
- raise wtf.ValidationError(self.message.format(a))
-
-
class CoprUniqueNameValidator(object):
def __init__(self, message = None):
if not message:
@@ -77,30 +64,46 @@ class ValueToPermissionNumberFilter(object):
return helpers.PermissionEnum.num('request')
return helpers.PermissionEnum.num('nothing')
-class CoprForm(wtf.Form):
- # also use id here, to be able to find out whether user is updating a copr
- # if so, we don't want to shout that name already exists
- id = wtf.HiddenField()
- name = wtf.TextField('Name',
- validators = [wtf.Required(),
- wtf.Regexp(re.compile(r'^[\w.-]+$'), message = 'Name must contain only letters, digits, underscores, dashes and dots.'),
- CoprUniqueNameValidator()])
- # choices must be list of tuples
- # => make list like [(fedora-18, fedora-18), ...]
- release = wtf.SelectField('Release', choices = [(x, x) for x in sorted(constants.CHROOTS)])
- arches = wtf.SelectMultipleField('Architectures',
- choices = [(x, x) for x in constants.DEFAULT_ARCHES],
- validators = [wtf.Required(), AllowedArchesValidator()])
- repos = wtf.TextAreaField('Repos',
- validators = [UrlListValidator()],
- filters = [StringListFilter()])
- initial_pkgs = wtf.TextAreaField('Initial packages to build',
- validators = [UrlListValidator()],
- filters = [StringListFilter()])
-
- @property
- def chroots(self):
- return ['{0}-{1}'.format(self.release.data, arch) for arch in self.arches.data ]
+class CoprFormFactory(object):
+ @staticmethod
+ def create_form_cls(mock_chroots=None):
+ class F(wtf.Form):
+ # also use id here, to be able to find out whether user is updating a copr
+ # if so, we don't want to shout that name already exists
+ id = wtf.HiddenField()
+ name = wtf.TextField('Name',
+ validators = [wtf.Required(),
+ wtf.Regexp(re.compile(r'^[\w.-]+$'), message='Name must contain only letters, digits, underscores, dashes and dots.'),
+ CoprUniqueNameValidator()])
+ repos = wtf.TextAreaField('Repos',
+ validators = [UrlListValidator()],
+ filters = [StringListFilter()])
+ initial_pkgs = wtf.TextAreaField('Initial packages to build',
+ validators = [UrlListValidator()],
+ filters = [StringListFilter()])
+
+ @property
+ def selected_chroots(self):
+ selected = []
+ for ch in self.chroots_list:
+ if getattr(self, ch).data:
+ selected.append(ch)
+ return selected
+
+ F.chroots_list = map(lambda x: x.chroot_name, models.MockChroot.query.filter(models.MockChroot.is_active==True).all())
+ F.chroots_list.sort()
+ F.chroots_sets = {} # sets of chroots according to how we should print them in columns
+ for ch in F.chroots_list:
+ checkbox_default = False
+ if mock_chroots and ch in map(lambda x:x.chroot_name, mock_chroots):
+ checkbox_default = True
+ setattr(F, ch, wtf.BooleanField(ch, default=checkbox_default))
+ if ch[0] in F.chroots_sets:
+ F.chroots_sets[ch[0]].append(ch)
+ else:
+ F.chroots_sets[ch[0]] = [ch]
+
+ return F
class BuildForm(wtf.Form):
11 years, 3 months
[copr] master: Add a mock_chroots property to copr model (952cea4)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 952cea493f418504ffb0bf3aa8c11e8544437666
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Mon Jan 14 14:35:54 2013 +0100
Add a mock_chroots property to copr model
>---------------------------------------------------------------
coprs_frontend/coprs/models.py | 10 ++++++++++
1 files changed, 10 insertions(+), 0 deletions(-)
diff --git a/coprs_frontend/coprs/models.py b/coprs_frontend/coprs/models.py
index e36a543..2658f7c 100644
--- a/coprs_frontend/coprs/models.py
+++ b/coprs_frontend/coprs/models.py
@@ -115,6 +115,16 @@ class Copr(db.Model, Serializer):
def repos_list(self):
return self.repos.split(' ')
+ @property
+ def mock_chroots(self):
+ if not hasattr(self, '_mock_chroots'):
+ self._mock_chroots = MockChroot.query.join(CoprChroot).\
+ filter(CoprChroot.copr_id==self.id).\
+ filter(MockChroot.is_active==True).all()
+ self._mock_chroots.sort(cmp=lambda x,y: cmp(x.chroot_name, y.chroot_name))
+
+ return self._mock_chroots
+
__mapper_args__ = {'order_by': id.desc()}
class CoprPermission(db.Model, Serializer):
11 years, 3 months