Skip to content

Commit 3ce9b0d

Browse files
committed
refactor(fixtures): adapt fixtures for SQLAlchemy 2.x (#151)
Replace `User.query.filter_by()` with `session.query(User).filter_by()` in user fixtures, as `Model.query` (via `query_property`) has been removed in SQLAlchemy 2.x. Use the modern connection-with-transaction pattern when creating the `__reana` schema, as `engine.execute()` and connection-less DDL no longer work in SQLAlchemy 2.x. Remove the `apispec<4.0` upper pin (it was only there to support marshmallow 2 which we no longer use). Closes reanahub/reana-server#770
1 parent 60f1fe3 commit 3ce9b0d

2 files changed

Lines changed: 20 additions & 11 deletions

File tree

pytest_reana/fixtures.py

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,10 @@ def create_ninja_turtle()
106106
engine = create_engine(base_app.config["SQLALCHEMY_DATABASE_URI"])
107107
base_app.session.bind = engine
108108
with base_app.app_context():
109-
if not engine.dialect.has_schema(engine, "__reana"):
110-
engine.execute(CreateSchema("__reana"))
109+
with engine.connect() as connection:
110+
if not engine.dialect.has_schema(connection, "__reana"):
111+
with connection.begin():
112+
connection.execute(CreateSchema("__reana"))
111113
if not database_exists(engine.url):
112114
create_database(engine.url)
113115
Base.metadata.create_all(bind=engine)
@@ -141,7 +143,7 @@ def test_user0_exists(default)
141143
from reana_db.models import User
142144

143145
user0_id = "00000000-0000-0000-0000-000000000000"
144-
user = User.query.filter_by(id_=user0_id).first()
146+
user = session.query(User).filter_by(id_=user0_id).first()
145147
if not user:
146148
with patch("reana_db.database.Session", return_value=session):
147149
user = User(id_=user0_id, email="user0@reana.io", access_token="user0token")
@@ -174,7 +176,7 @@ def test_user1_exists(default)
174176
from reana_db.models import User
175177

176178
user1_id = "11111111-1111-1111-1111-111111111111"
177-
user = User.query.filter_by(id_=user1_id).first()
179+
user = session.query(User).filter_by(id_=user1_id).first()
178180
if not user:
179181
with patch("reana_db.database.Session", return_value=session):
180182
user = User(id_=user1_id, email="user1@reana.io", access_token="user1token")
@@ -207,7 +209,7 @@ def test_user2_exists(default)
207209
from reana_db.models import User
208210

209211
user2_id = "22222222-2222-2222-2222-222222222222"
210-
user = User.query.filter_by(id_=user2_id).first()
212+
user = session.query(User).filter_by(id_=user2_id).first()
211213
if not user:
212214
with patch("reana_db.database.Session", return_value=session):
213215
user = User(id_=user2_id, email="user2@reana.io", access_token="user2token")
@@ -810,7 +812,9 @@ def sample_yadage_workflow_in_db(
810812
session.delete(job)
811813
for resource in workflow.resources:
812814
session.delete(resource)
813-
for user_workflow in UserWorkflow.query.filter_by(workflow_id=workflow.id_):
815+
for user_workflow in session.query(UserWorkflow).filter_by(
816+
workflow_id=workflow.id_
817+
):
814818
session.delete(user_workflow)
815819
session.delete(workflow)
816820
session.commit()
@@ -855,7 +859,9 @@ def sample_yadage_workflow_in_db_owned_by_user1(
855859
session.delete(job)
856860
for resource in workflow.resources:
857861
session.delete(resource)
858-
for user_workflow in UserWorkflow.query.filter_by(workflow_id=workflow.id_):
862+
for user_workflow in session.query(UserWorkflow).filter_by(
863+
workflow_id=workflow.id_
864+
):
859865
session.delete(user_workflow)
860866
session.delete(workflow)
861867
session.commit()
@@ -900,7 +906,9 @@ def sample_serial_workflow_in_db(
900906
session.delete(job)
901907
for resource in workflow.resources:
902908
session.delete(resource)
903-
for user_workflow in UserWorkflow.query.filter_by(workflow_id=workflow.id_):
909+
for user_workflow in session.query(UserWorkflow).filter_by(
910+
workflow_id=workflow.id_
911+
):
904912
session.delete(user_workflow)
905913
session.delete(workflow)
906914
session.commit()
@@ -945,7 +953,9 @@ def sample_serial_workflow_in_db_owned_by_user1(
945953
session.delete(job)
946954
for resource in workflow.resources:
947955
session.delete(resource)
948-
for user_workflow in UserWorkflow.query.filter_by(workflow_id=workflow.id_):
956+
for user_workflow in session.query(UserWorkflow).filter_by(
957+
workflow_id=workflow.id_
958+
):
949959
session.delete(user_workflow)
950960
session.delete(workflow)
951961
session.commit()

setup.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,7 @@
3333
extras_require["all"].extend(reqs)
3434

3535
install_requires = [
36-
# apispec>=4.0 drops support for marshmallow<3
37-
"apispec[yaml]>=3.0,<4.0",
36+
"apispec[yaml]>=3.0",
3837
"apispec-webframeworks",
3938
"check-manifest>=0.25,<1",
4039
"checksumdir>=1.1.4,<1.2",

0 commit comments

Comments
 (0)