From 7fa39b06fdfe6c1396571545aef216b6c1740ec2 Mon Sep 17 00:00:00 2001 From: Dominik Turecek Date: Jun 04 2019 06:08:33 +0000 Subject: [frontend] fix sqlalchemy deprecation warning SADeprecationWarning: The mapper.order_by parameter is deprecated, and will be removed in a future release. Use Query.order_by() to determine the ordering of a result set. Fixes: #603 --- diff --git a/frontend/coprs_frontend/coprs/logic/coprs_logic.py b/frontend/coprs_frontend/coprs/logic/coprs_logic.py index 3ada091..8c446ad 100644 --- a/frontend/coprs_frontend/coprs/logic/coprs_logic.py +++ b/frontend/coprs_frontend/coprs/logic/coprs_logic.py @@ -4,7 +4,7 @@ import datetime from sqlalchemy import and_ from sqlalchemy.sql import func -from sqlalchemy import asc +from sqlalchemy import asc, desc from sqlalchemy.event import listen from sqlalchemy.orm.attributes import NEVER_SET from sqlalchemy.orm.exc import NoResultFound @@ -187,7 +187,8 @@ class CoprsLogic(object): @classmethod def get_multiple_fulltext(cls, search_string): - query = (models.Copr.query.join(models.User) + query = (models.Copr.query.order_by(desc(models.Copr.created_on)) + .join(models.User) .filter(models.Copr.deleted == False)) if "/" in search_string: # copr search by its full name if search_string[0] == '@': # searching for @group/project @@ -303,6 +304,7 @@ class CoprsLogic(object): @classmethod def exists_for_user(cls, user, coprname, incl_deleted=False): existing = (models.Copr.query + .order_by(desc(models.Copr.created_on)) .filter(models.Copr.name == coprname) .filter(models.Copr.user_id == user.id)) @@ -314,6 +316,7 @@ class CoprsLogic(object): @classmethod def exists_for_group(cls, group, coprname, incl_deleted=False): existing = (models.Copr.query + .order_by(desc(models.Copr.created_on)) .filter(models.Copr.name == coprname) .filter(models.Copr.group_id == group.id)) diff --git a/frontend/coprs_frontend/coprs/models.py b/frontend/coprs_frontend/coprs/models.py index 5ba695b..99df1a2 100644 --- a/frontend/coprs_frontend/coprs/models.py +++ b/frontend/coprs_frontend/coprs/models.py @@ -259,10 +259,6 @@ class _CoprPublic(db.Model, helpers.Serializer, CoprSearchRelatedData): # temporary project if non-null delete_after = db.Column(db.DateTime, index=True, nullable=True) - __mapper_args__ = { - "order_by": created_on.desc() - } - class _CoprPrivate(db.Model, helpers.Serializer): """ diff --git a/frontend/coprs_frontend/tests/test_logic/test_coprs_logic.py b/frontend/coprs_frontend/tests/test_logic/test_coprs_logic.py index 2642c2d..805c17b 100644 --- a/frontend/coprs_frontend/tests/test_logic/test_coprs_logic.py +++ b/frontend/coprs_frontend/tests/test_logic/test_coprs_logic.py @@ -3,6 +3,8 @@ import datetime from flask_whooshee import Whooshee +from sqlalchemy import desc + from copr_common.enums import ActionTypeEnum from coprs import app from coprs.logic.actions_logic import ActionsLogic @@ -54,7 +56,8 @@ class TestCoprsLogic(CoprsTestCase): writer.commit(optimize=True) query = CoprsLogic.get_multiple_fulltext("prefix") - pre_query = models.Copr.query.join(models.User).filter(models.Copr.deleted == False) + pre_query = models.Copr.query.order_by(desc(models.Copr.created_on))\ + .join(models.User).filter(models.Copr.deleted == False) query = pre_query.whooshee_search(self.prefix, whoosheer=CoprWhoosheer) # needs flask-whooshee-0.2.0 diff --git a/frontend/coprs_frontend/tests/test_views/test_api_ns/test_api_general.py b/frontend/coprs_frontend/tests/test_views/test_api_ns/test_api_general.py index 0730597..ad1675c 100644 --- a/frontend/coprs_frontend/tests/test_views/test_api_ns/test_api_general.py +++ b/frontend/coprs_frontend/tests/test_views/test_api_ns/test_api_general.py @@ -3,6 +3,7 @@ import json import pytest import sqlalchemy +from sqlalchemy import desc from coprs.logic.coprs_logic import CoprsLogic from tests.coprs_test_case import CoprsTestCase, TransactionDecorator @@ -53,7 +54,8 @@ class TestCreateCopr(CoprsTestCase): response = json.loads(r.data.decode("utf-8")) assert "New project was successfully created" in response["message"] - copr = self.models.Copr.query.filter(self.models.Copr.name == self.copr_name).one() + copr = self.models.Copr.query.order_by(desc(self.models.Copr.created_on))\ + .filter(self.models.Copr.name == self.copr_name).one() assert copr.name == self.copr_name assert [self.mc1.name] == [c.name for c in copr.active_chroots] assert copr.repos == '' @@ -85,7 +87,8 @@ class TestCreateCopr(CoprsTestCase): response = json.loads(r.data.decode("utf-8")) assert "New project was successfully created" in response["message"] - copr = self.models.Copr.query.filter(self.models.Copr.name == self.copr_name).one() + copr = self.models.Copr.query.order_by(desc(self.models.Copr.created_on))\ + .filter(self.models.Copr.name == self.copr_name).one() assert copr.name == self.copr_name assert [self.mc1.name] == [c.name for c in copr.active_chroots] assert copr.repos == self.repos diff --git a/frontend/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_general.py b/frontend/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_general.py index d403e21..d0fa2b7 100644 --- a/frontend/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_general.py +++ b/frontend/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_general.py @@ -4,6 +4,8 @@ import pytest from unittest import mock +from sqlalchemy import desc + from copr_common.enums import ActionTypeEnum from coprs import app, models @@ -81,8 +83,9 @@ class TestCoprNew(CoprsTestCase): "arches": ["i386"]}, follow_redirects=True) - assert self.models.Copr.query.filter( - self.models.Copr.name == "foo").first() + assert self.models.Copr.query\ + .order_by(desc(models.Copr.created_on))\ + .filter(self.models.Copr.name == "foo").first() assert self.success_string.encode("utf-8") in r.data # make sure no initial build was submitted @@ -93,8 +96,9 @@ class TestCoprNew(CoprsTestCase): f_mock_chroots, f_db): self.db.session.add(self.c1) - foocoprs = len(self.models.Copr.query.filter( - self.models.Copr.name == self.c1.name).all()) + foocoprs = len(self.models.Copr.query + .order_by(desc(models.Copr.created_on)) + .filter(self.models.Copr.name == self.c1.name).all()) assert foocoprs > 0 r = self.test_client.post( @@ -105,16 +109,18 @@ class TestCoprNew(CoprsTestCase): self.db.session.add(self.c1) - assert len(self.models.Copr.query.filter( - self.models.Copr.name == self.c1.name).all()) == foocoprs + 1 + assert len(self.models.Copr.query + .order_by(desc(models.Copr.created_on)) + .filter(self.models.Copr.name == self.c1.name).all()) == foocoprs + 1 assert self.success_string.encode("utf-8") in r.data @TransactionDecorator("u1") def test_copr_new_exists_for_this_user(self, f_users, f_coprs, f_mock_chroots, f_db): self.db.session.add(self.c1) - foocoprs = len(self.models.Copr.query.filter( - self.models.Copr.name == self.c1.name).all()) + foocoprs = len(self.models.Copr.query + .order_by(desc(models.Copr.created_on)) + .filter(self.models.Copr.name == self.c1.name).all()) assert foocoprs > 0 r = self.test_client.post( @@ -124,8 +130,9 @@ class TestCoprNew(CoprsTestCase): follow_redirects=True) self.db.session.add(self.c1) - assert len(self.models.Copr.query.filter( - self.models.Copr.name == self.c1.name).all()) == foocoprs + assert len(self.models.Copr.query + .order_by(desc(models.Copr.created_on)) + .filter(self.models.Copr.name == self.c1.name).all()) == foocoprs assert b"You already have project named" in r.data @TransactionDecorator("u1") @@ -139,8 +146,9 @@ class TestCoprNew(CoprsTestCase): }, follow_redirects=True) - copr = self.models.Copr.query.filter( - self.models.Copr.name == "foo").first() + copr = self.models.Copr.query\ + .order_by(desc(models.Copr.created_on))\ + .filter(self.models.Copr.name == "foo").first() assert copr assert self.success_string.encode("utf-8") in r.data @@ -161,8 +169,9 @@ class TestCoprNew(CoprsTestCase): }, follow_redirects=True) - copr = self.models.Copr.query.filter( - self.models.Copr.name == "foo").first() + copr = self.models.Copr.query\ + .order_by(desc(models.Copr.created_on))\ + .filter(self.models.Copr.name == "foo").first() assert copr assert self.success_string.encode("utf-8") in r.data @@ -191,8 +200,9 @@ class TestCoprNew(CoprsTestCase): self.c1 = self.db.session.merge(self.c1) self.u1 = self.db.session.merge(self.u1) - assert len(self.models.Copr.query.filter(self.models.Copr.name == - self.c1.name) + assert len(self.models.Copr.query + .order_by(desc(models.Copr.created_on)) + .filter(self.models.Copr.name == self.c1.name) .filter(self.models.Copr.user == self.u1) .all()) == 2 assert self.success_string.encode("utf-8") in r.data @@ -581,8 +591,9 @@ class TestCoprDelete(CoprsTestCase): assert b"Project has been deleted successfully" in r.data self.db.session.add(self.c1) assert self.models.Action.query.first().id == self.c1.id - assert self.models.Copr.query.filter( - self.models.Copr.id == self.c1.id).first().deleted + assert self.models.Copr.query\ + .order_by(desc(models.Copr.created_on))\ + .filter(self.models.Copr.id == self.c1.id).first().deleted @TransactionDecorator("u1") def test_copr_delete_does_not_delete_if_verify_filled_wrongly( @@ -596,8 +607,9 @@ class TestCoprDelete(CoprsTestCase): assert b"Project has been deleted successfully" not in r.data assert not self.models.Action.query.first() - assert self.models.Copr.query.filter( - self.models.Copr.id == self.c1.id).first() + assert self.models.Copr.query\ + .order_by(desc(models.Copr.created_on))\ + .filter(self.models.Copr.id == self.c1.id).first() @TransactionDecorator("u2") def test_non_user_cant_delete(self, f_users, f_coprs, f_db): @@ -609,8 +621,9 @@ class TestCoprDelete(CoprsTestCase): self.c1 = self.db.session.merge(self.c1) assert b"Project has been deleted successfully" not in r.data assert not self.models.Action.query.first() - assert self.models.Copr.query.filter( - self.models.Copr.id == self.c1.id).first() + assert self.models.Copr.query\ + .order_by(desc(models.Copr.created_on))\ + .filter(self.models.Copr.id == self.c1.id).first() class TestCoprRepoGeneration(CoprsTestCase):