[copr] master: Allow altering User.{admin, proven} by manage.py (8b21536)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 8b21536dcd41370c5b2a7ab1825ac6bd5dbdaa78
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Fri Feb 15 12:24:01 2013 +0100
Allow altering User.{admin,proven} by manage.py
>---------------------------------------------------------------
coprs_frontend/manage.py | 39 ++++++++++++++++++++++++++++++++++++++-
1 files changed, 38 insertions(+), 1 deletions(-)
diff --git a/coprs_frontend/manage.py b/coprs_frontend/manage.py
index e191d52..01c5616 100755
--- a/coprs_frontend/manage.py
+++ b/coprs_frontend/manage.py
@@ -3,7 +3,7 @@
import os
import flask
-from flask.ext.script import Manager, Command, Option
+from flask.ext.script import Manager, Command, Option, Group
from coprs import app
from coprs import db
@@ -125,6 +125,42 @@ class DisplayChrootsCommand(Command):
default=False),
)
+class AlterUserCommand(Command):
+ def run(self, name, **kwargs):
+ user = models.User.query.filter(models.User.openid_name==models.User.openidize_name(name)).first()
+ if not user:
+ print 'No user named {0}.'.format(name)
+ return
+
+ if kwargs['admin']:
+ user.admin = True
+ if kwargs['no_admin']:
+ user.admin = False
+ if kwargs['proven']:
+ user.proven = True
+ if kwargs['no_proven']:
+ user.proven = False
+
+ db.session.commit()
+
+ option_list = (
+ Option('name'),
+ Group(
+ Option('--admin',
+ action='store_true'),
+ Option('--no-admin',
+ action='store_true'),
+ exclusive=True
+ ),
+ Group(
+ Option('--proven',
+ action='store_true'),
+ Option('--no-proven',
+ action='store_true'),
+ exclusive=True
+ )
+ )
+
manager = Manager(app)
manager.add_command('create_sqlite_file', CreateSqliteFileCommand())
manager.add_command('create_db', CreateDBCommand())
@@ -133,6 +169,7 @@ manager.add_command('create_chroot', CreateChrootCommand())
manager.add_command('alter_chroot', AlterChrootCommand())
manager.add_command('display_chroots', DisplayChrootsCommand())
manager.add_command('drop_chroot', DropChrootCommand())
+manager.add_command('alter_user', AlterUserCommand())
if __name__ == '__main__':
manager.run()
11 years, 1 month
[copr] master: Add blinker to requirements, sort them alphabetically (6f8dbcd)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 6f8dbcd75b25387b8a9268b0965705d592fe3c5b
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Fri Feb 15 09:09:53 2013 +0100
Add blinker to requirements, sort them alphabetically
>---------------------------------------------------------------
requirements.txt | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/requirements.txt b/requirements.txt
index 6217ff4..d9b8d1f 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,10 +1,11 @@
# Used for when working from a virtualenv.
# Use this file by running "$ pip install -r requirements.txt"
+alembic
argparse
+blinker
flask-sqlalchemy
flask-openid
-flask-wtf
-alembic
-pytest
flask-script
flask-whooshee
+flask-wtf
+pytest
11 years, 1 month
[copr] master: Drop the previous fulltext search now that whoosh is working (2158a19)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 2158a19492b02d91628d7c7bfc12f9b2771c7f4d
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Thu Feb 14 14:37:19 2013 +0100
Drop the previous fulltext search now that whoosh is working
>---------------------------------------------------------------
...4b45f5476_remove_fulltext_in_favor_of_whoosh.py | 31 +++++++++++++
coprs_frontend/coprs/models.py | 47 --------------------
coprs_frontend/coprs/sql_custom.py | 26 -----------
3 files changed, 31 insertions(+), 73 deletions(-)
diff --git a/coprs_frontend/alembic/versions/1ee4b45f5476_remove_fulltext_in_favor_of_whoosh.py b/coprs_frontend/alembic/versions/1ee4b45f5476_remove_fulltext_in_favor_of_whoosh.py
new file mode 100644
index 0000000..a5e9df4
--- /dev/null
+++ b/coprs_frontend/alembic/versions/1ee4b45f5476_remove_fulltext_in_favor_of_whoosh.py
@@ -0,0 +1,31 @@
+"""empty message
+
+Revision ID: 1ee4b45f5476
+Revises: 3a035889852c
+Create Date: 2013-02-14 14:11:50.624673
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = '1ee4b45f5476'
+down_revision = '3a035889852c'
+
+from alembic import op
+import sqlalchemy as sa
+
+
+def upgrade():
+ ### commands auto generated by Alembic - please adjust! ###
+ op.drop_column('copr', u'copr_ts_col')
+ if op.get_bind().dialect.name == 'postgresql':
+ op.execute('DROP trigger IF EXISTS copr_ts_update ON copr')
+ elif op.get_bind().dialect.name == 'sqlite':
+ op.execute('DROP trigger IF EXISTS copr_ts_update')
+ op.execute('DROP trigger IF EXISTS copr_ts_insert')
+ ### end Alembic commands ###
+
+
+def downgrade():
+ ### commands auto generated by Alembic - please adjust! ###
+ op.add_column('copr', sa.Column(u'copr_ts_col', sa.TEXT(), nullable=True))
+ ### end Alembic commands ###
diff --git a/coprs_frontend/coprs/models.py b/coprs_frontend/coprs/models.py
index 18d8dfe..81d23df 100644
--- a/coprs_frontend/coprs/models.py
+++ b/coprs_frontend/coprs/models.py
@@ -6,7 +6,6 @@ from sqlalchemy.ext.associationproxy import association_proxy
from coprs import constants
from coprs import db
from coprs import helpers
-from coprs import sql_custom
class Serializer(object):
def to_dict(self, options = {}):
@@ -108,8 +107,6 @@ class User(db.Model, Serializer):
class Copr(db.Model, Serializer):
- query_class = sql_custom.FullTextQuery
-
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(100), nullable = False)
repos = db.Column(db.Text)
@@ -118,9 +115,6 @@ class Copr(db.Model, Serializer):
instructions = db.Column(db.Text)
# duplicate information, but speeds up a lot and makes queries simpler
build_count = db.Column(db.Integer, default = 0)
- # fulltext
- copr_ts_col = db.Column(sql_custom.Tsvector)
- copr_ts_idx = db.Index('copr_ts_col', postgresql_using='gin')
# relations
owner_id = db.Column(db.Integer, db.ForeignKey('user.id'))
@@ -143,47 +137,6 @@ class Copr(db.Model, Serializer):
def instructions_or_not_filled(self):
return self.instructions or 'Instructions not filled in by author.'
-### fulltext search trigger for copr
-# postgres
-sqlalchemy.event.listen(
- Copr.__table__,
- 'after_create',
- sqlalchemy.schema.DDL("CREATE TRIGGER copr_ts_update BEFORE INSERT OR UPDATE \
- ON copr \
- FOR EACH ROW EXECUTE PROCEDURE \
- tsvector_update_trigger(copr_ts_col, 'pg_catalog.english', name, description, instructions);").\
- execute_if(dialect='postgresql')
-)
-
-# sqlite
-sqlalchemy.event.listen(
- Copr.__table__,
- 'after_create',
- sqlalchemy.schema.DDL("CREATE TRIGGER copr_ts_update \
- AFTER UPDATE OF name, description, instructions \
- ON copr \
- FOR EACH ROW \
- BEGIN \
- UPDATE copr SET copr_ts_col = coalesce(name, '') || ' ' || \
- coalesce(description, '') || ' ' || coalesce(instructions, ''); \
- END;").\
- execute_if(dialect='sqlite')
-)
-
-sqlalchemy.event.listen(
- Copr.__table__,
- 'after_create',
- sqlalchemy.schema.DDL("CREATE TRIGGER copr_ts_insert \
- AFTER INSERT \
- ON copr \
- FOR EACH ROW \
- BEGIN \
- UPDATE copr SET copr_ts_col = coalesce(name, '') || ' ' || \
- coalesce(description, '') || ' ' || coalesce(instructions, ''); \
- END;").\
- execute_if(dialect='sqlite')
-)
-
class CoprPermission(db.Model, Serializer):
# 0 = nothing, 1 = asked for, 2 = approved
# not using enum, as that translates to varchar on some DBs
diff --git a/coprs_frontend/coprs/sql_custom.py b/coprs_frontend/coprs/sql_custom.py
deleted file mode 100644
index 3be56ed..0000000
--- a/coprs_frontend/coprs/sql_custom.py
+++ /dev/null
@@ -1,26 +0,0 @@
-from sqlalchemy import func
-from sqlalchemy import types
-from sqlalchemy.ext import compiler
-
-from coprs import db
-
-class Tsvector(types.UnicodeText):
- # TODO: define the custom operator to perform fulltext searches ?
- pass
-
-(a)compiler.compiles(Tsvector, 'postgresql')
-def compile_tsvector(element, compiler, **kw):
- return 'tsvector'
-
-(a)compiler.compiles(Tsvector, 'sqlite')
-def compile_tsvector(element, compiler, **kw):
- return 'text'
-
-
-class FullTextQuery(db.Query):
- def fulltext(self, column, search_string):
- if db.engine.dialect.name == 'postgresql':
- search_with_or = ' | '.join(search_string.split())
- return self.filter(column.op('@@@')(func.to_tsquery(search_with_or)))
- else:
- return self.filter(column.like('%{0}%'.format(search_string)))
11 years, 1 month
[copr] master: Start using flask-whooshee (13115d7)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 13115d7ad638e2d9a446f0031206da76bbbb5306
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Thu Feb 14 14:09:43 2013 +0100
Start using flask-whooshee
>---------------------------------------------------------------
coprs_frontend/coprs/__init__.py | 3 ++
coprs_frontend/coprs/config.py | 2 +
coprs_frontend/coprs/logic/coprs_logic.py | 8 ++++-
coprs_frontend/coprs/whoosheers.py | 56 +++++++++++++++++++++++++++++
requirements.txt | 1 +
5 files changed, 69 insertions(+), 1 deletions(-)
diff --git a/coprs_frontend/coprs/__init__.py b/coprs_frontend/coprs/__init__.py
index f239b65..6a9290c 100644
--- a/coprs_frontend/coprs/__init__.py
+++ b/coprs_frontend/coprs/__init__.py
@@ -5,6 +5,7 @@ import flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.openid import OpenID
+from flask.ext.whooshee import Whooshee
app = flask.Flask(__name__)
@@ -17,10 +18,12 @@ else:
oid = OpenID(app, app.config['OPENID_STORE'])
db = SQLAlchemy(app)
+whooshee = Whooshee(app)
import coprs.filters
import coprs.log
import coprs.models
+import coprs.whoosheers
from coprs.views import api_ns
from coprs.views.api_ns import api_general
diff --git a/coprs_frontend/coprs/config.py b/coprs_frontend/coprs/config.py
index 6218ea9..b5ee63e 100644
--- a/coprs_frontend/coprs/config.py
+++ b/coprs_frontend/coprs/config.py
@@ -5,6 +5,7 @@ class Config(object):
DATA_DIR = os.path.join(os.path.dirname(__file__), '../../data')
DATABASE = os.path.join(DATA_DIR, 'copr.db')
OPENID_STORE = os.path.join(DATA_DIR, 'openid_store')
+ WHOOSHEE_DIR = os.path.join(DATA_DIR, 'whooshee')
SECRET_KEY = 'THISISNOTASECRETATALL'
BACKEND_PASSWORD = 'thisisbackend'
@@ -33,6 +34,7 @@ class UnitTestConfig(Config):
CSRF_ENABLED = False
DATABASE = os.path.abspath('tests/data/copr.db')
OPENID_STORE = os.path.abspath('tests/data/openid_store')
+ WHOOSHEE_DIR = os.path.abspath('tests/data/whooshee')
# SQLAlchemy
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.abspath(DATABASE)
diff --git a/coprs_frontend/coprs/logic/coprs_logic.py b/coprs_frontend/coprs/logic/coprs_logic.py
index afdeadb..0a1d373 100644
--- a/coprs_frontend/coprs/logic/coprs_logic.py
+++ b/coprs_frontend/coprs/logic/coprs_logic.py
@@ -4,6 +4,7 @@ from coprs import db
from coprs import exceptions
from coprs import helpers
from coprs import models
+from coprs import whoosheers
class CoprsLogic(object):
"""Used for manipulating Coprs. All methods accept user object as a first argument, as this may be needed in future."""
@@ -51,7 +52,12 @@ class CoprsLogic(object):
@classmethod
def get_multiple_fulltext(cls, user, search_string):
- query = models.Copr.query.fulltext(models.Copr.copr_ts_col, search_string)
+ try:
+ ids = whoosheers.CoprUserWhoosheer.search(search_string, values_of='copr_id')
+ except ValueError as e:
+ # too short search_string
+ ids = []
+ query = models.Copr.query.filter(models.Copr.id.in_(ids))
return query
@classmethod
diff --git a/coprs_frontend/coprs/whoosheers.py b/coprs_frontend/coprs/whoosheers.py
new file mode 100644
index 0000000..d5da048
--- /dev/null
+++ b/coprs_frontend/coprs/whoosheers.py
@@ -0,0 +1,56 @@
+import re
+import os
+
+import whoosh
+import whoosh.fields
+import whoosh.index
+import whoosh.qparser
+
+from flask.ext.sqlalchemy import models_committed
+from flask.ext.whooshee import AbstractWhoosheer
+
+from coprs import app
+from coprs import db
+from coprs import models
+from coprs import whooshee
+
+(a)whooshee.register_whoosheer
+class CoprUserWhoosheer(AbstractWhoosheer):
+ schema = whoosh.fields.Schema(
+ copr_id = whoosh.fields.NUMERIC(stored=True, unique=True),
+ user_id = whoosh.fields.NUMERIC(stored=True),
+ username = whoosh.fields.TEXT(),
+ coprname = whoosh.fields.TEXT(),
+ description = whoosh.fields.TEXT(),
+ instructions = whoosh.fields.TEXT())
+
+ models = [models.Copr, models.User]
+ index = None
+
+ @classmethod
+ def update_user(cls, writer, user):
+ # TODO: this is not needed now, as users can't change names, but may be needed later
+ pass
+
+ @classmethod
+ def update_copr(cls, writer, copr):
+ writer.update_document(copr_id=copr.id,
+ user_id=copr.owner.id,
+ username=copr.owner.name,
+ coprname=copr.name,
+ description=copr.description,
+ instructions=copr.instructions)
+
+ @classmethod
+ def insert_user(cls, writer, user):
+ # nothing, user doesn't have coprs yet
+ pass
+
+ @classmethod
+ def insert_copr(cls, writer, copr):
+ writer.add_document(copr_id=copr.id,
+ user_id=copr.owner.id,
+ username=copr.owner.name,
+ coprname=copr.name,
+ description=copr.description,
+ instructions=copr.instructions)
diff --git a/requirements.txt b/requirements.txt
index d3fb7dd..6217ff4 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -7,3 +7,4 @@ flask-wtf
alembic
pytest
flask-script
+flask-whooshee
11 years, 1 month
[copr] master: Few tweaks to testsuite (b82f73a)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit b82f73a8fe189be54ee0733b2f3b337f44bcaee8
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Thu Feb 14 14:02:12 2013 +0100
Few tweaks to testsuite
- make some testing values unicode explicitly in preparation for whoosh integration
- commit all fixtures as once before test to achieve a little speedup
>---------------------------------------------------------------
coprs_frontend/tests/coprs_test_case.py | 23 +++----
.../test_views/test_backend_ns/test_general.py | 10 ++--
.../tests/test_views/test_coprs_ns/test_builds.py | 14 ++--
.../tests/test_views/test_coprs_ns/test_general.py | 65 +++++++++-----------
4 files changed, 53 insertions(+), 59 deletions(-)
diff --git a/coprs_frontend/tests/coprs_test_case.py b/coprs_frontend/tests/coprs_test_case.py
index 6a9d675..7756343 100644
--- a/coprs_frontend/tests/coprs_test_case.py
+++ b/coprs_frontend/tests/coprs_test_case.py
@@ -22,8 +22,8 @@ class CoprsTestCase(object):
datadir = os.path.commonprefix([self.app.config['DATABASE'], self.app.config['OPENID_STORE']])
if not os.path.exists(datadir):
os.makedirs(datadir)
-
coprs.db.create_all()
+ self.db.session.commit()
def teardown_method(self, method):
# delete just data, not the tables
@@ -35,22 +35,24 @@ class CoprsTestCase(object):
return {'Authorization': 'Basic ' + base64.b64encode('doesntmatter:{0}'.format(self.backend_passwd))}
@pytest.fixture
+ def f_db(self):
+ self.db.session.commit()
+
+ @pytest.fixture
def f_users(self):
- self.u1 = models.User(openid_name = 'http://user1.id.fedoraproject.org/', proven = False, mail = 'user1(a)foo.bar')
- self.u2 = models.User(openid_name = 'http://user2.id.fedoraproject.org/', proven = False, mail = 'user2(a)spam.foo')
- self.u3 = models.User(openid_name = 'http://user3.id.fedoraproject.org/', proven = False, mail = 'baz(a)bar.bar')
+ self.u1 = models.User(openid_name = u'http://user1.id.fedoraproject.org/', proven = False, mail = 'user1(a)foo.bar')
+ self.u2 = models.User(openid_name = u'http://user2.id.fedoraproject.org/', proven = False, mail = 'user2(a)spam.foo')
+ self.u3 = models.User(openid_name = u'http://user3.id.fedoraproject.org/', proven = False, mail = 'baz(a)bar.bar')
self.db.session.add_all([self.u1, self.u2, self.u3])
- self.db.session.commit()
@pytest.fixture
def f_coprs(self):
- 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.c1 = models.Copr(name = u'foocopr', owner = self.u1)
+ self.c2 = models.Copr(name = u'foocopr', owner = self.u2)
+ self.c3 = models.Copr(name = u'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):
@@ -78,7 +80,6 @@ class CoprsTestCase(object):
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()
@pytest.fixture
def f_builds(self):
@@ -88,7 +89,6 @@ class CoprsTestCase(object):
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()
@pytest.fixture
def f_copr_permissions(self):
@@ -97,4 +97,3 @@ class CoprsTestCase(object):
self.cp3 = models.CoprPermission(copr = self.c3, user = self.u1, copr_builder = helpers.PermissionEnum.num('request'), copr_admin = helpers.PermissionEnum.num('approved'))
self.db.session.add_all([self.cp1, self.cp2, self.cp3])
- self.db.session.commit()
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 d7df4c2..f7328a1 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
@@ -8,18 +8,18 @@ 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):
+ def test_waiting_build_only_lists_not_started_or_ended(self, f_users, f_coprs, f_builds, f_db):
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):
+ def test_updating_requires_password(self, f_users, f_coprs, f_builds, f_db):
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):
+ def test_update_build_started(self, f_users, f_coprs, f_builds, f_db):
data = """
{
"builds":[
@@ -43,7 +43,7 @@ class TestUpdateBuilds(CoprsTestCase):
assert updated.results == 'http://server/results/foo/bar/'
assert updated.started_on == 1234
- def test_update_build_ended(self, f_users, f_coprs, f_builds):
+ def test_update_build_ended(self, f_users, f_coprs, f_builds, f_db):
data = """
{
"builds":[
@@ -67,7 +67,7 @@ class TestUpdateBuilds(CoprsTestCase):
assert updated.status == 1
assert updated.ended_on == 12345
- def test_update_more_existent_and_non_existent_builds(self, f_users, f_coprs, f_builds):
+ def test_update_more_existent_and_non_existent_builds(self, f_users, f_coprs, f_builds, f_db):
data = """
{
"builds":[
diff --git a/coprs_frontend/tests/test_views/test_coprs_ns/test_builds.py b/coprs_frontend/tests/test_views/test_coprs_ns/test_builds.py
index 71c869b..574ca57 100644
--- a/coprs_frontend/tests/test_views/test_coprs_ns/test_builds.py
+++ b/coprs_frontend/tests/test_views/test_coprs_ns/test_builds.py
@@ -3,12 +3,12 @@ import flask
from tests.coprs_test_case import CoprsTestCase
class TestCoprShowBuilds(CoprsTestCase):
- def test_copr_show_builds(self, f_users, f_coprs, f_builds):
+ def test_copr_show_builds(self, f_users, f_coprs, f_builds, f_db):
r = self.tc.get('/coprs/detail/{0}/{1}/builds/'.format(self.u2.name, self.c2.name))
assert r.data.count('<tr class="build-') == 2
class TestCoprAddBuild(CoprsTestCase):
- def test_copr_owner_can_add_build(self, f_users, f_coprs):
+ def test_copr_owner_can_add_build(self, f_users, f_coprs, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u1.openid_name
@@ -19,7 +19,7 @@ class TestCoprAddBuild(CoprsTestCase):
follow_redirects = True)
assert self.models.Build.query.first().pkgs == 'http://testing'
- def test_copr_allowed_user_can_add_build(self, f_users, f_coprs, f_copr_permissions):
+ def test_copr_allowed_user_can_add_build(self, f_users, f_coprs, f_copr_permissions, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u1.openid_name
@@ -30,7 +30,7 @@ class TestCoprAddBuild(CoprsTestCase):
follow_redirects = True)
assert self.models.Build.query.first().pkgs == 'http://testing'
- def test_copr_not_yet_allowed_user_cant_add_build(self, f_users, f_coprs, f_copr_permissions):
+ def test_copr_not_yet_allowed_user_cant_add_build(self, f_users, f_coprs, f_copr_permissions, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u1.openid_name
@@ -41,7 +41,7 @@ class TestCoprAddBuild(CoprsTestCase):
follow_redirects = True)
assert not self.models.Build.query.first()
- def test_copr_user_without_permission_cant_add_build(self, f_users, f_coprs, f_copr_permissions):
+ def test_copr_user_without_permission_cant_add_build(self, f_users, f_coprs, f_copr_permissions, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u3.openid_name
@@ -53,7 +53,7 @@ class TestCoprAddBuild(CoprsTestCase):
assert not self.models.Build.query.first()
class TestCoprCancelBuild(CoprsTestCase):
- def test_copr_build_submitter_can_cancel_build(self, f_users, f_coprs, f_builds):
+ def test_copr_build_submitter_can_cancel_build(self, f_users, f_coprs, f_builds, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u1.openid_name
@@ -65,7 +65,7 @@ class TestCoprCancelBuild(CoprsTestCase):
self.db.session.add(self.b1)
assert self.b1.canceled == True
- def test_copr_build_non_submitter_cannot_cancel_build(self, f_users, f_coprs, f_builds):
+ def test_copr_build_non_submitter_cannot_cancel_build(self, f_users, f_coprs, f_builds, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u2.openid_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 e81b857..f57ecde 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
@@ -6,12 +6,12 @@ class TestCoprsShow(CoprsTestCase):
def test_show_no_entries(self):
assert 'No coprs...' in self.tc.get('/').data
- def test_show_more_entries(self, f_users, f_coprs):
+ def test_show_more_entries(self, f_users, f_coprs, f_db):
r = self.tc.get('/')
assert r.data.count('<div class="copr">') == 3
class TestCoprsOwned(CoprsTestCase):
- def test_owned_none(self, f_users, f_coprs):
+ def test_owned_none(self, f_users, f_coprs, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u3.openid_name
@@ -20,7 +20,7 @@ class TestCoprsOwned(CoprsTestCase):
r = c.get('/coprs/owned/{0}/'.format(self.u3.name))
assert 'No coprs...' in r.data
- def test_owned_one(self, f_users, f_coprs):
+ def test_owned_one(self, f_users, f_coprs, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u1.openid_name
@@ -30,7 +30,7 @@ class TestCoprsOwned(CoprsTestCase):
assert r.data.count('<div class="copr">') == 1
class TestCoprsAllowed(CoprsTestCase):
- def test_allowed_none(self, f_users, f_coprs, f_copr_permissions):
+ def test_allowed_none(self, f_users, f_coprs, f_copr_permissions, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u3.openid_name
@@ -39,7 +39,7 @@ class TestCoprsAllowed(CoprsTestCase):
r = c.get('/coprs/allowed/{0}/'.format(self.u3.name))
assert 'No coprs...' in r.data
- def test_allowed_one(self, f_users, f_coprs, f_copr_permissions):
+ def test_allowed_one(self, f_users, f_coprs, f_copr_permissions, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u2.openid_name
@@ -48,7 +48,7 @@ class TestCoprsAllowed(CoprsTestCase):
r = c.get('/coprs/allowed/{0}/'.format(self.u1.name))
assert r.data.count('<div class="copr">') == 1
- def test_allowed_one_but_asked_for_one_more(self, f_users, f_coprs, f_copr_permissions):
+ def test_allowed_one_but_asked_for_one_more(self, f_users, f_coprs, f_copr_permissions, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u1.openid_name
@@ -60,7 +60,7 @@ class TestCoprsAllowed(CoprsTestCase):
class TestCoprNew(CoprsTestCase):
success_string = 'New copr was successfully created'
- def test_copr_new_normal(self, f_users, f_mock_chroots):
+ def test_copr_new_normal(self, f_users, f_mock_chroots, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u1.openid_name
@@ -72,7 +72,7 @@ class TestCoprNew(CoprsTestCase):
# make sure no initial build was submitted
assert self.models.Build.query.first() == None
- def test_copr_new_exists_for_another_user(self, f_users, f_coprs, f_mock_chroots):
+ def test_copr_new_exists_for_another_user(self, f_users, f_coprs, f_mock_chroots, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u3.openid_name
@@ -82,12 +82,11 @@ class TestCoprNew(CoprsTestCase):
assert foocoprs > 0
r = c.post('/coprs/new/', data = {'name': self.c1.name, 'fedora-rawhide-i386': 'y'}, follow_redirects = True)
- print r.data
self.db.session.add(self.c1)
assert len(self.models.Copr.query.filter(self.models.Copr.name == self.c1.name).all()) == foocoprs + 1
assert self.success_string in r.data
- def test_copr_new_exists_for_this_user(self, f_users, f_coprs, f_mock_chroots):
+ def test_copr_new_exists_for_this_user(self, f_users, f_coprs, f_mock_chroots, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u1.openid_name
@@ -101,7 +100,7 @@ class TestCoprNew(CoprsTestCase):
assert len(self.models.Copr.query.filter(self.models.Copr.name == self.c1.name).all()) == foocoprs
assert "You already have copr named" in r.data
- def test_copr_new_with_initial_pkgs(self, f_users, f_mock_chroots):
+ def test_copr_new_with_initial_pkgs(self, f_users, f_mock_chroots, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u1.openid_name
@@ -120,28 +119,26 @@ class TestCoprDetail(CoprsTestCase):
r = self.tc.get('/coprs/detail/foo/bar/')
assert r.status_code == 404
- def test_copr_detail_normal(self, f_users, f_coprs):
+ def test_copr_detail_normal(self, f_users, f_coprs, f_db):
r = self.tc.get('/coprs/detail/{0}/{1}/'.format(self.u1.name, self.c1.name))
assert r.status_code == 200
assert self.c1.name in r.data
- def test_copr_detail_contains_builds(self, f_users, f_coprs, f_builds):
+ def test_copr_detail_contains_builds(self, f_users, f_coprs, f_builds, f_db):
r = self.tc.get('/coprs/detail/{0}/{1}/builds/'.format(self.u1.name, self.c1.name))
- print r.data
assert r.data.count('<tr class="build') == 2
- def test_copr_detail_anonymous_doesnt_contain_permissions_table_when_no_permissions(self, f_users, f_coprs, f_copr_permissions):
+ def test_copr_detail_anonymous_doesnt_contain_permissions_table_when_no_permissions(self, f_users, f_coprs, f_copr_permissions, f_db):
r = self.tc.get('/coprs/detail/{0}/{1}/permissions/'.format(self.u1.name, self.c1.name))
assert '<table class="permissions"' not in r.data
- def test_copr_detail_contains_permissions_table(self, f_users, f_coprs, f_copr_permissions):
+ def test_copr_detail_contains_permissions_table(self, f_users, f_coprs, f_copr_permissions, f_db):
r = self.tc.get('/coprs/detail/{0}/{1}/permissions/'.format(self.u2.name, self.c3.name))
- print r.data
assert '<table class="permissions-table"' in r.data
assert '<td>{0}'.format(self.u3.name) in r.data
assert '<td>{0}'.format(self.u1.name) in r.data
- def test_copr_detail_allows_asking_for_permissions(self, f_users, f_coprs, f_copr_permissions):
+ def test_copr_detail_allows_asking_for_permissions(self, f_users, f_coprs, f_copr_permissions, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u1.openid_name
@@ -151,7 +148,7 @@ class TestCoprDetail(CoprsTestCase):
# u1 is approved builder, check for that
assert '/permissions_applier_change/' in r.data
- def test_copr_detail_doesnt_allow_owner_to_ask_for_permissions(self, f_users, f_coprs):
+ def test_copr_detail_doesnt_allow_owner_to_ask_for_permissions(self, f_users, f_coprs, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u2.openid_name
@@ -160,7 +157,7 @@ class TestCoprDetail(CoprsTestCase):
r = c.get('/coprs/detail/{0}/{1}/permissions/'.format(self.u2.name, self.c2.name))
assert '/permissions_applier_change/' not in r.data
- def test_detail_has_correct_permissions_form(self, f_users, f_coprs, f_copr_permissions):
+ def test_detail_has_correct_permissions_form(self, f_users, f_coprs, f_copr_permissions, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u2.openid_name
@@ -172,11 +169,11 @@ class TestCoprDetail(CoprsTestCase):
assert '<select id="copr_builder_1" name="copr_builder_1">' in r.data
assert '<select id="copr_admin_1" name="copr_admin_1">' in r.data
- def test_copr_detail_doesnt_show_cancel_build_for_anonymous(self, f_users, f_coprs, f_builds):
+ def test_copr_detail_doesnt_show_cancel_build_for_anonymous(self, f_users, f_coprs, f_builds, f_db):
r = self.tc.get('/coprs/detail/{0}/{1}/'.format(self.u2.name, self.c2.name))
assert '/cancel_build/' not in r.data
- def test_copr_detail_doesnt_allow_non_submitter_to_cancel_build(self, f_users, f_coprs, f_builds):
+ def test_copr_detail_doesnt_allow_non_submitter_to_cancel_build(self, f_users, f_coprs, f_builds, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u1.openid_name
@@ -185,7 +182,7 @@ class TestCoprDetail(CoprsTestCase):
r = c.get('/coprs/detail/{0}/{1}/builds/'.format(self.u2.name, self.c2.name))
assert '/cancel_build/' not in r.data
- def test_copr_detail_allows_submitter_to_cancel_build(self, f_users, f_coprs, f_builds):
+ def test_copr_detail_allows_submitter_to_cancel_build(self, f_users, f_coprs, f_builds, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u2.openid_name
@@ -196,7 +193,7 @@ class TestCoprDetail(CoprsTestCase):
class TestCoprEdit(CoprsTestCase):
- def test_edit_prefills_id(self, f_users, f_coprs):
+ def test_edit_prefills_id(self, f_users, f_coprs, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u1.openid_name
@@ -209,7 +206,7 @@ class TestCoprEdit(CoprsTestCase):
class TestCoprUpdate(CoprsTestCase):
- def test_update_no_changes(self, f_users, f_coprs, f_mock_chroots):
+ def test_update_no_changes(self, f_users, f_coprs, f_mock_chroots, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u1.openid_name
@@ -220,7 +217,7 @@ 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, f_mock_chroots):
+ def test_copr_admin_can_update(self, f_users, f_coprs, f_copr_permissions, f_mock_chroots, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u1.openid_name
@@ -229,10 +226,9 @@ class TestCoprUpdate(CoprsTestCase):
r = c.post('/coprs/detail/{0}/{1}/update/'.format(self.u2.name, self.c3.name),
data = {'name': self.c3.name, 'fedora-rawhide-i386': 'y', 'id': self.c3.id},
follow_redirects = True)
- print r.data
assert 'Copr was updated successfully' in r.data
- def test_update_multiple_chroots(self, f_users, f_coprs, f_copr_permissions, f_mock_chroots):
+ def test_update_multiple_chroots(self, f_users, f_coprs, f_copr_permissions, f_mock_chroots, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u1.openid_name
@@ -251,7 +247,7 @@ class TestCoprUpdate(CoprsTestCase):
assert self.mc3.chroot_name in mock_chroots_names
assert self.mc1.chroot_name not in mock_chroots_names
- def test_update_deletes_multiple_chroots(self, f_users, f_coprs, f_copr_permissions, f_mock_chroots):
+ def test_update_deletes_multiple_chroots(self, f_users, f_coprs, f_copr_permissions, f_mock_chroots, f_db):
# https://fedorahosted.org/copr/ticket/42
with self.tc as c:
with c.session_transaction() as s:
@@ -274,7 +270,7 @@ class TestCoprUpdate(CoprsTestCase):
assert len(mock_chroots) == 1
class TestCoprApplyForPermissions(CoprsTestCase):
- def test_apply(self, f_users, f_coprs):
+ def test_apply(self, f_users, f_coprs, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u2.openid_name
@@ -292,7 +288,7 @@ class TestCoprApplyForPermissions(CoprsTestCase):
assert new_perm.copr_builder == 1
assert new_perm.copr_admin == 0
- def test_apply_doesnt_lower_other_values_from_admin_to_request(self, f_users, f_coprs, f_copr_permissions):
+ def test_apply_doesnt_lower_other_values_from_admin_to_request(self, f_users, f_coprs, f_copr_permissions, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u1.openid_name
@@ -311,7 +307,7 @@ class TestCoprApplyForPermissions(CoprsTestCase):
assert new_perm.copr_admin == 1
class TestCoprUpdatePermissions(CoprsTestCase):
- def test_cancel_permission(self, f_users, f_coprs, f_copr_permissions):
+ def test_cancel_permission(self, f_users, f_coprs, f_copr_permissions, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u2.openid_name
@@ -326,7 +322,7 @@ class TestCoprUpdatePermissions(CoprsTestCase):
check_string += 'request</option><option selected value="2">approved</option></select>'
assert check_string not in r.data
- def test_update_more_permissions(self, f_users, f_coprs, f_copr_permissions):
+ def test_update_more_permissions(self, f_users, f_coprs, f_copr_permissions, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u2.openid_name
@@ -348,7 +344,7 @@ class TestCoprUpdatePermissions(CoprsTestCase):
assert u3_c3_perms.copr_builder == self.helpers.PermissionEnum.num('nothing')
assert u3_c3_perms.copr_admin == self.helpers.PermissionEnum.num('approved')
- def test_copr_admin_can_update_permissions(self, f_users, f_coprs, f_copr_permissions):
+ def test_copr_admin_can_update_permissions(self, f_users, f_coprs, f_copr_permissions, f_db):
with self.tc as c:
with c.session_transaction() as s:
s['openid'] = self.u1.openid_name
@@ -357,5 +353,4 @@ class TestCoprUpdatePermissions(CoprsTestCase):
r = c.post('/coprs/detail/{0}/{1}/update_permissions/'.format(self.u2.name, self.c3.name),
data = {'copr_builder_1': '2', 'copr_admin_3': '2'},
follow_redirects = True)
- print r.data
assert 'Copr permissions were updated' in r.data
11 years, 1 month
[copr] master: Use a default value for 'from' field, when app.config['SERVER_NAME'] is None (6cf0ed9)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 6cf0ed9a8f1de6caeee7397e6b83b6489a5ccb5e
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Mon Feb 11 09:57:01 2013 +0100
Use a default value for 'from' field, when app.config['SERVER_NAME'] is None
>---------------------------------------------------------------
coprs_frontend/coprs/log.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/coprs_frontend/coprs/log.py b/coprs_frontend/coprs/log.py
index 60e24e1..1c2386a 100644
--- a/coprs_frontend/coprs/log.py
+++ b/coprs_frontend/coprs/log.py
@@ -20,7 +20,7 @@ Message:
if not app.debug:
mail_handler = logging.handlers.SMTPHandler('127.0.0.1',
- 'copr-fe-error@{0}'.format(app.config['SERVER_NAME']),
+ 'copr-fe-error@{0}'.format(app.config['SERVER_NAME'] or 'fedorahosted.org'),
send_logs_to,
'Yay, error in copr frontend occured!')
mail_handler.setFormatter(formatter)
11 years, 1 month
[copr] master: Move the cli to use the production URL now (ec87142)
by Pierre-YvesChibon
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit ec87142ca1d2d6da0f9f2e3573c483476bfd2543
Author: Pierre-Yves Chibon <pingou(a)pingoured.fr>
Date: Sat Feb 9 20:37:21 2013 +0100
Move the cli to use the production URL now
>---------------------------------------------------------------
copr_cli/main.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/copr_cli/main.py b/copr_cli/main.py
index 24118b7..a0c7a8a 100644
--- a/copr_cli/main.py
+++ b/copr_cli/main.py
@@ -12,7 +12,7 @@ from cliff.commandmanager import CommandManager
__version__ = '0.1.0'
__description__ = "CLI tool to run copr"
-copr_url = 'http://localhost:5000'
+copr_url = 'http://copr-fe.cloud.fedoraproject.org/'
copr_api_url = '{0}/api'.format(copr_url)
11 years, 1 month
[copr] master: Implement the build action in the copr-cli (73c29a6)
by Pierre-YvesChibon
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 73c29a65fef9307534ed86202908357ac7728cbc
Author: Pierre-Yves Chibon <pingou(a)pingoured.fr>
Date: Sun Feb 3 20:47:56 2013 +0100
Implement the build action in the copr-cli
The build action is used to build certain packages in a given copr.
>---------------------------------------------------------------
copr_cli/subcommands.py | 37 +++++++++++++++++++++++++++++++++++++
coprcli-setup.py | 1 +
2 files changed, 38 insertions(+), 0 deletions(-)
diff --git a/copr_cli/subcommands.py b/copr_cli/subcommands.py
index c1af50a..c0013db 100644
--- a/copr_cli/subcommands.py
+++ b/copr_cli/subcommands.py
@@ -109,3 +109,40 @@ class AddCopr(Command):
print output['message']
else:
print 'Something went wrong:\n {0}'.format(output['error'])
+
+
+class Build(Command):
+ """ Build a new package into a given copr. """
+
+ log = logging.getLogger(__name__)
+
+ def get_parser(self, prog_name):
+ parser = super(type(self), self).get_parser(prog_name)
+ parser.add_argument('copr')
+ parser.add_argument('pkgs', nargs='+', action='append')
+ parser.add_argument('--memory', dest='memory',
+ help="")
+ parser.add_argument('--timeout', dest='timeout',
+ help="")
+ return parser
+
+ def take_action(self, args):
+ user = set_user()
+ URL = '{0}/coprs/detail/{1}/{2}/new_build/'.format(
+ copr_api_url,
+ user['username'],
+ args.copr)
+
+ data = {'pkgs': ' '.join(args.pkgs[0]),
+ 'memory': args.memory,
+ 'timeout': args.timeout
+ }
+
+ req = requests.post(URL,
+ auth=(user['username'], user['token']),
+ data=data)
+ output = json.loads(req.text)
+ if req.status_code != 200:
+ print 'Something went wrong:\n {0}'.format(output['error'])
+ else:
+ print output['message']
diff --git a/coprcli-setup.py b/coprcli-setup.py
index a7a40d3..0084494 100644
--- a/coprcli-setup.py
+++ b/coprcli-setup.py
@@ -30,6 +30,7 @@ requires = [
subcommands = [
'list = copr_cli.subcommands:List',
'add-copr = copr_cli.subcommands:AddCopr',
+ 'build-copr = copr_cli.subcommands:Build',
]
__name__ = 'copr-cli'
11 years, 1 month
[PATCH 1/2] Implement the build action in the copr-cli
by Pierre-Yves Chibon
The build action is used to build certain packages in a given copr.
---
copr_cli/subcommands.py | 37 +++++++++++++++++++++++++++++++++++++
coprcli-setup.py | 1 +
2 files changed, 38 insertions(+)
diff --git a/copr_cli/subcommands.py b/copr_cli/subcommands.py
index c1af50a..c0013db 100644
--- a/copr_cli/subcommands.py
+++ b/copr_cli/subcommands.py
@@ -109,3 +109,40 @@ class AddCopr(Command):
print output['message']
else:
print 'Something went wrong:\n {0}'.format(output['error'])
+
+
+class Build(Command):
+ """ Build a new package into a given copr. """
+
+ log = logging.getLogger(__name__)
+
+ def get_parser(self, prog_name):
+ parser = super(type(self), self).get_parser(prog_name)
+ parser.add_argument('copr')
+ parser.add_argument('pkgs', nargs='+', action='append')
+ parser.add_argument('--memory', dest='memory',
+ help="")
+ parser.add_argument('--timeout', dest='timeout',
+ help="")
+ return parser
+
+ def take_action(self, args):
+ user = set_user()
+ URL = '{0}/coprs/detail/{1}/{2}/new_build/'.format(
+ copr_api_url,
+ user['username'],
+ args.copr)
+
+ data = {'pkgs': ' '.join(args.pkgs[0]),
+ 'memory': args.memory,
+ 'timeout': args.timeout
+ }
+
+ req = requests.post(URL,
+ auth=(user['username'], user['token']),
+ data=data)
+ output = json.loads(req.text)
+ if req.status_code != 200:
+ print 'Something went wrong:\n {0}'.format(output['error'])
+ else:
+ print output['message']
diff --git a/coprcli-setup.py b/coprcli-setup.py
index a7a40d3..0084494 100644
--- a/coprcli-setup.py
+++ b/coprcli-setup.py
@@ -30,6 +30,7 @@ requires = [
subcommands = [
'list = copr_cli.subcommands:List',
'add-copr = copr_cli.subcommands:AddCopr',
+ 'build-copr = copr_cli.subcommands:Build',
]
__name__ = 'copr-cli'
--
1.8.1.2
11 years, 1 month
[PATCH 1/3] Make the api return 500 status code when something goes wrong.
by Pierre-Yves Chibon
---
coprs_frontend/coprs/views/api_ns/api_general.py | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/coprs_frontend/coprs/views/api_ns/api_general.py b/coprs_frontend/coprs/views/api_ns/api_general.py
index 735da98..7c87388 100644
--- a/coprs_frontend/coprs/views/api_ns/api_general.py
+++ b/coprs_frontend/coprs/views/api_ns/api_general.py
@@ -53,6 +53,7 @@ def api_new_copr():
"""
form = forms.CoprFormFactory.create_form_cls()(csrf_enabled=False)
+ httpcode = 200
if form.validate_on_submit():
infos = []
try:
@@ -79,14 +80,20 @@ def api_new_copr():
db.session.commit()
except exceptions.DuplicateException, err:
output = {'output': 'notok', 'error': err}
+ httpcode = 500
db.session.rollback()
else:
- errormsg = "\n".join(form.errors['name'])
+ errormsg = ''
+ if form.errors:
+ errormsg = "\n".join(form.errors['name'])
errormsg = errormsg.replace('"', "'")
output = {'output': 'notok', 'error': errormsg}
+ httpcode = 500
- return flask.jsonify(output)
+ jsonout = flask.jsonify(output)
+ jsonout.status_code = httpcode
+ return jsonout
@api_ns.route('/owned/')
@@ -101,6 +108,7 @@ def api_coprs_by_owner(username=None):
"""
username = flask.request.args.get('username', None) or username
+ httpcode = 200
if 'username':
query = coprs_logic.CoprsLogic.get_multiple(flask.g.user,
user_relation='owned', username=username)
@@ -113,5 +121,8 @@ def api_coprs_by_owner(username=None):
'instructions': repo.instructions})
else:
output = {'output': 'notok', 'error': 'Invalid request'}
+ httpcode = 500
- return flask.jsonify(output)
+ jsonout = flask.jsonify(output)
+ jsonout.status_code = httpcode
+ return jsonout
--
1.8.1
11 years, 1 month