Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions src/tagstudio/core/library/alchemy/library.py
Original file line number Diff line number Diff line change
Expand Up @@ -1273,11 +1273,20 @@ def sort_key(text: str):
)
)

tags = list(session.execute(query))
tags = [(tag_id, tag_name) for tag_id, tag_name in session.execute(query)]

if name:
shorthand_query = select(Tag.id, Tag.shorthand).where(
and_(Tag.shorthand.is_not(None), Tag.shorthand.icontains(name))
)
tags.extend(
(tag_id, shorthand)
for tag_id, shorthand in session.execute(shorthand_query)
if shorthand is not None
)

query = select(TagAlias.tag_id, TagAlias.name).where(TagAlias.name.icontains(name))
tags.extend(session.execute(query))
tags.extend((tag_id, alias_name) for tag_id, alias_name in session.execute(query))

tags.sort(key=lambda t: sort_key(t[1]))
# Use order from Tag.name or TagAlias.name depending on which comes first for each tag.
Expand Down
15 changes: 15 additions & 0 deletions tests/test_library.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,21 @@ def test_tag_search(library: Library):
assert library.search_tags(tag.name * 2) == ([], [])


def test_tag_search_exact_shorthand_takes_priority(generate_tag: Callable[..., Tag]):
with TemporaryDirectory() as tmp_dir_name:
library = Library()
status = library.open_library(Path(tmp_dir_name), in_memory=True)
assert status.success

blue = unwrap(library.add_tag(generate_tag("blue", shorthand="u")))
black = unwrap(library.add_tag(generate_tag("black", shorthand="b")))

direct_tags, _ = library.search_tags("b")

assert blue.id != black.id
assert direct_tags[0].id == black.id


def test_get_entry(library: Library, entry_min: Entry):
result = unwrap(library.get_entry_full(unwrap(entry_min.id)))
assert len(result.tags) == 1
Expand Down
Loading