Migrate Query.get() calls to Session.get()

Query.get() is a legacy SQLAlchemy 1.x construct that emits
LegacyAPIWarning on every invocation. Session.get() is the 2.0
replacement.

Also guard against None primary keys in
tools/parameters/basic.py where the value can legitimately be
absent (previously triggered 'SAWarning: fully NULL primary key
identity cannot load any object').
This commit is contained in:
mvdbeek
2026-04-11 13:39:26 +02:00
parent 2ecc6d0fe1
commit 88f3bd0135
7 changed files with 15 additions and 15 deletions
+1 -1
View File
@@ -157,7 +157,7 @@ class JobIO(UsesDictVisibleKeys):
# Drop in 24.0
io_dict.pop("model_class", None)
job_id = io_dict.pop("job_id")
job = sa_session.query(Job).get(job_id)
job = sa_session.get(Job, job_id)
return cls(sa_session=sa_session, job=job, **io_dict)
@classmethod
+3 -3
View File
@@ -230,7 +230,7 @@ class HistoryContentsManager(base.SortableManager):
decoded_target_ids.extend(self.app.security.decode_id(h) for h in payload.target_history_ids)
target_histories = [
h for h in map(trans.sa_session.query(model.History).get, decoded_target_ids) if h and h.user == user
h for h in (trans.sa_session.get(model.History, i) for i in decoded_target_ids) if h and h.user == user
]
if len(target_histories) != len(decoded_target_ids):
raise glx_exceptions.MessageException("You lack permission for one or more destination histories.")
@@ -244,8 +244,8 @@ class HistoryContentsManager(base.SortableManager):
else:
raise glx_exceptions.MessageException("Unknown content type.")
contents = list(map(trans.sa_session.query(model.HistoryDatasetAssociation).get, decoded_ds))
contents.extend(map(trans.sa_session.query(model.HistoryDatasetCollectionAssociation).get, decoded_dc))
contents = [trans.sa_session.get(model.HistoryDatasetAssociation, i) for i in decoded_ds]
contents.extend(trans.sa_session.get(model.HistoryDatasetCollectionAssociation, i) for i in decoded_dc)
contents.sort(key=lambda c: c.hid)
for c in contents:
@@ -319,7 +319,7 @@ class InstallRepositoryManager:
tsr_ids = [r.id for r in created_or_updated_tool_shed_repositories]
tool_shed_repositories = []
for tsr_id in tsr_ids:
tsr = self.install_model.context.query(self.install_model.ToolShedRepository).get(tsr_id)
tsr = self.install_model.context.get(self.install_model.ToolShedRepository, tsr_id)
tool_shed_repositories.append(tsr)
clause_list = []
for tsr_id in tsr_ids:
@@ -492,8 +492,8 @@ class InstallRepositoryManager:
tsr_ids, repo_info_dicts, tool_panel_section_keys=tool_panel_section_keys
)
for tsr_id in ordered_tsr_ids:
repository = self.install_model.context.query(self.install_model.ToolShedRepository).get(
self.app.security.decode_id(tsr_id)
repository = self.install_model.context.get(
self.install_model.ToolShedRepository, self.app.security.decode_id(tsr_id)
)
if repository.status in [
self.install_model.ToolShedRepository.installation_status.NEW,
+1 -1
View File
@@ -947,7 +947,7 @@ class JobContext(BaseJobContext):
return library_folder
def get_hdca(self, object_id):
hdca = self.sa_session.query(HistoryDatasetCollectionAssociation).get(int(object_id))
hdca = self.sa_session.get(HistoryDatasetCollectionAssociation, int(object_id))
return hdca
def create_library_folder(self, parent_folder: "LibraryFolder", name: str, description: str):
+4 -1
View File
@@ -2201,7 +2201,10 @@ class DataToolParameter(BaseDataToolParameter):
# support that for integer column types.
log.warning("Encoded ID where unencoded ID expected.")
single_value = trans.security.decode_id(single_value)
rval.append(trans.sa_session.query(HistoryDatasetAssociation).get(single_value))
if single_value is None:
rval.append(None)
else:
rval.append(trans.sa_session.get(HistoryDatasetAssociation, single_value))
if len(found_srcs) > 1 and "hdca" in found_srcs:
raise ParameterValueError(
"if collections are supplied to multiple data input parameter, only collections may be used",
@@ -416,7 +416,7 @@ class DatasetInterface(BaseUIController, UsesAnnotations, UsesItemRatings, UsesE
def _get_dataset_for_edit(self, trans, dataset_id):
if dataset_id is not None:
id = self.decode_id(dataset_id)
data = trans.sa_session.query(HistoryDatasetAssociation).get(id)
data = trans.sa_session.get(HistoryDatasetAssociation, id)
else:
trans.log_event("dataset_id is None, cannot load a dataset to edit.")
return None, self.message_exception(trans, "You must provide a dataset id to edit attributes.")
+2 -5
View File
@@ -59,7 +59,6 @@ from tool_shed.util.metadata_util import (
from tool_shed.webapp import model
from tool_shed.webapp.model.db import (
get_repository_by_name_and_owner,
get_repository_query,
)
if TYPE_CHECKING:
@@ -262,10 +261,8 @@ def generate_sharable_link_for_repository_in_tool_shed(
def get_repository_in_tool_shed(app: "ToolShedApp", id, eagerload_columns=None):
"""Get a repository on the tool shed side from the database via id."""
q = get_repository_query(app.model.context)
if eagerload_columns:
q = q.options(joinedload(*eagerload_columns))
return q.get(app.security.decode_id(id))
options = [joinedload(col) for col in eagerload_columns] if eagerload_columns else []
return app.model.context.get(model.Repository, app.security.decode_id(id), options=options)
def get_repo_info_dict(trans: "ProvidesRepositoriesContext", repository_id, changeset_revision):