From 940617cd633ec20736de779154e2c71a68657696 Mon Sep 17 00:00:00 2001 From: Jann Stute <46534683+Computerdores@users.noreply.github.com> Date: Sun, 3 Aug 2025 22:03:36 +0200 Subject: [PATCH] fix(library): get_tag_by_name (#1006) --- src/tagstudio/core/library/alchemy/library.py | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/src/tagstudio/core/library/alchemy/library.py b/src/tagstudio/core/library/alchemy/library.py index 0726f945..06907ef8 100644 --- a/src/tagstudio/core/library/alchemy/library.py +++ b/src/tagstudio/core/library/alchemy/library.py @@ -858,7 +858,7 @@ class Library: def search_library( self, search: BrowsingState, - page_size: int, + page_size: int | None, ) -> SearchResult: """Filter library by search query. @@ -903,7 +903,8 @@ class Library: sort_on = func.lower(Entry.path) statement = statement.order_by(asc(sort_on) if search.ascending else desc(sort_on)) - statement = statement.limit(page_size).offset(search.page_index * page_size) + if page_size is not None: + statement = statement.limit(page_size).offset(search.page_index * page_size) logger.info( "searching library", @@ -1425,12 +1426,14 @@ class Library: ) tag = session.scalar(tags_query.where(Tag.id == tag_id)) - session.expunge(tag) - for parent in tag.parent_tags: - session.expunge(parent) + if tag is not None: + session.expunge(tag) - for alias in tag.aliases: - session.expunge(alias) + for parent in tag.parent_tags: + session.expunge(parent) + + for alias in tag.aliases: + session.expunge(alias) return tag @@ -1438,10 +1441,23 @@ class Library: with Session(self.engine) as session: statement = ( select(Tag) + .options(selectinload(Tag.parent_tags), selectinload(Tag.aliases)) .outerjoin(TagAlias) .where(or_(Tag.name == tag_name, TagAlias.name == tag_name)) ) - return session.scalar(statement) + + tag = session.scalar(statement) + + if tag is not None: + session.expunge(tag) + + for parent in tag.parent_tags: + session.expunge(parent) + + for alias in tag.aliases: + session.expunge(alias) + + return tag def get_alias(self, tag_id: int, alias_id: int) -> TagAlias | None: with Session(self.engine) as session: