Skip to content

Commit

Permalink
Fix SA2.0 ORM usage in model.item_attrs
Browse files Browse the repository at this point in the history
  • Loading branch information
jdavcs committed Sep 27, 2023
1 parent e79e614 commit 90e1e32
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions lib/galaxy/model/item_attrs.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import logging

from sqlalchemy import select
from sqlalchemy.sql.expression import func

# Cannot import galaxy.model b/c it creates a circular import graph.
Expand Down Expand Up @@ -27,13 +28,13 @@ def get_ave_item_rating_data(self, db_session, item, webapp_model=None):
if not item_rating_assoc_class:
raise Exception(f"Item does not have ratings: {item.__class__.__name__}")
item_id_filter = self._get_item_id_filter_str(item, item_rating_assoc_class)
ave_rating = db_session.query(func.avg(item_rating_assoc_class.rating)).filter(item_id_filter).scalar()
ave_rating = db_session.scalar(select(func.avg(item_rating_assoc_class.rating)).where(item_id_filter))
# Convert ave_rating to float; note: if there are no item ratings, ave rating is None.
if ave_rating:
ave_rating = float(ave_rating)
else:
ave_rating = 0
num_ratings = int(db_session.query(func.count(item_rating_assoc_class.rating)).filter(item_id_filter).scalar())
num_ratings = db_session.scalar(select(func.count(item_rating_assoc_class.rating)).where(item_id_filter))
return (ave_rating, num_ratings)

def rate_item(self, db_session, user, item, rating, webapp_model=None):
Expand Down Expand Up @@ -65,7 +66,9 @@ def get_user_item_rating(self, db_session, user, item, webapp_model=None):

# Query rating table by user and item id.
item_id_filter = self._get_item_id_filter_str(item, item_rating_assoc_class)
return db_session.query(item_rating_assoc_class).filter_by(user=user).filter(item_id_filter).first()
return db_session.scalars(
select(item_rating_assoc_class).filter_by(user=user).where(item_id_filter).limit(1)
).first()

def _get_item_rating_assoc_class(self, item, webapp_model=None):
"""Returns an item's item-rating association class."""
Expand Down Expand Up @@ -118,7 +121,7 @@ def get_item_annotation_obj(db_session, user, item):
return None

# Get annotation association object.
annotation_assoc = db_session.query(annotation_assoc_class).filter_by(user=user)
annotation_assoc = select(annotation_assoc_class).filter_by(user=user)

if item.__class__ == galaxy.model.History:
annotation_assoc = annotation_assoc.filter_by(history=item)
Expand All @@ -134,7 +137,7 @@ def get_item_annotation_obj(db_session, user, item):
annotation_assoc = annotation_assoc.filter_by(page=item)
elif item.__class__ == galaxy.model.Visualization:
annotation_assoc = annotation_assoc.filter_by(visualization=item)
return annotation_assoc.first()
return db_session.scalars(annotation_assoc.limit(1)).first()


def get_item_annotation_str(db_session, user, item):
Expand Down

0 comments on commit 90e1e32

Please sign in to comment.