diff --git a/lib/tool_shed/util/shed_index.py b/lib/tool_shed/util/shed_index.py index 4035a8c5c5c..bd823b6cb09 100644 --- a/lib/tool_shed/util/shed_index.py +++ b/lib/tool_shed/util/shed_index.py @@ -5,6 +5,10 @@ from mercurial import ( hg, ui, ) +from sqlalchemy import ( + false, + select, +) from whoosh.writing import AsyncWriter import tool_shed.webapp.model.mapping as ts_mapping @@ -91,21 +95,11 @@ def get_repos(sa_session, file_path, hgweb_config_dir, **kwargs): """ hgwcm = hgweb_config_manager hgwcm.hgweb_config_dir = hgweb_config_dir - # Do not index deleted, deprecated, or "tool_dependency_definition" type repositories. - q = ( - sa_session.query(model.Repository) - .filter_by(deleted=False) - .filter_by(deprecated=False) - .order_by(model.Repository.update_time.desc()) - ) - q = q.filter(model.Repository.type != "tool_dependency_definition") - for repo in q: + for repo in get_repositories_for_indexing(sa_session): category_names = [] - for rca in sa_session.query(model.RepositoryCategoryAssociation).filter( - model.RepositoryCategoryAssociation.repository_id == repo.id - ): - for category in sa_session.query(model.Category).filter(model.Category.id == rca.category.id): - category_names.append(category.name.lower()) + for rca in get_repo_cat_associations(sa_session, repo.id): + category = sa_session.get(model.Category, rca.category.id) + category_names.append(category.name.lower()) categories = (",").join(category_names) repo_id = repo.id name = repo.name @@ -118,7 +112,7 @@ def get_repos(sa_session, file_path, hgweb_config_dir, **kwargs): repo_owner_username = "" if repo.user_id is not None: - user = sa_session.query(model.User).filter(model.User.id == repo.user_id).one() + user = sa_session.get(model.User, repo.user_id) repo_owner_username = user.username.lower() last_updated = pretty_print_time_interval(repo.update_time) @@ -196,3 +190,23 @@ def load_one_dir(path): ) tools_in_dir.append(tool) return tools_in_dir + + +def get_repositories_for_indexing(session): + # Do not index deleted, deprecated, or "tool_dependency_definition" type repositories. + Repository = model.Repository + stmt = ( + select(Repository) + .where(Repository.deleted == false()) + .where(Repository.deprecated == false()) + .where(Repository.type != "tool_dependency_definition") + .order_by(Repository.update_time.desc()) + ) + return session.scalars(stmt) + + +def get_repo_cat_associations(session, repository_id): + stmt = select(model.RepositoryCategoryAssociation).where( + model.RepositoryCategoryAssociation.repository_id == repository_id + ) + return session.scalars(stmt)