mirror of
https://github.com/TagStudioDev/TagStudio.git
synced 2026-02-03 00:29:14 +00:00
fix tag search
This commit is contained in:
@@ -59,6 +59,17 @@ class ItemType(enum.Enum):
|
||||
TAG_GROUP = 2
|
||||
|
||||
|
||||
@dataclass
|
||||
class TagFilterState:
|
||||
search: str | None = None
|
||||
page_index: int | None = 0
|
||||
page_size: int | None = 500
|
||||
|
||||
def __post_init__(self):
|
||||
if self.search is not None:
|
||||
self.search = self.search.strip()
|
||||
|
||||
|
||||
@dataclass
|
||||
class FilterState:
|
||||
"""Represent a state of the Library grid view."""
|
||||
|
||||
@@ -39,7 +39,7 @@ from ...constants import (
|
||||
from ...enums import LibraryPrefs
|
||||
from ...media_types import MediaCategories
|
||||
from .db import make_tables
|
||||
from .enums import FieldTypeEnum, FilterState, TagColor
|
||||
from .enums import FieldTypeEnum, FilterState, TagColor, TagFilterState
|
||||
from .fields import (
|
||||
BaseField,
|
||||
DatetimeField,
|
||||
@@ -512,7 +512,7 @@ class Library:
|
||||
|
||||
def search_tags(
|
||||
self,
|
||||
search: FilterState, # TODO TSQLANG move this to str
|
||||
filter_state: TagFilterState,
|
||||
) -> list[Tag]:
|
||||
"""Return a list of Tag records matching the query."""
|
||||
with Session(self.engine) as session:
|
||||
@@ -522,11 +522,11 @@ class Library:
|
||||
selectinload(Tag.aliases),
|
||||
)
|
||||
|
||||
if search.tag:
|
||||
if filter_state.search:
|
||||
query = query.where(
|
||||
or_(
|
||||
Tag.name.icontains(search.tag),
|
||||
Tag.shorthand.icontains(search.tag),
|
||||
Tag.name.icontains(filter_state.search),
|
||||
Tag.shorthand.icontains(filter_state.search),
|
||||
)
|
||||
)
|
||||
|
||||
@@ -536,7 +536,7 @@ class Library:
|
||||
|
||||
logger.info(
|
||||
"searching tags",
|
||||
search=search,
|
||||
search=filter_state,
|
||||
statement=str(query),
|
||||
results=len(res),
|
||||
)
|
||||
|
||||
@@ -12,7 +12,7 @@ from PySide6.QtWidgets import (
|
||||
QWidget,
|
||||
)
|
||||
from src.core.library import Library, Tag
|
||||
from src.core.library.alchemy.enums import FilterState
|
||||
from src.core.library.alchemy.enums import TagFilterState
|
||||
from src.qt.modals.build_tag import BuildTagPanel
|
||||
from src.qt.widgets.panel import PanelModal, PanelWidget
|
||||
from src.qt.widgets.tag import TagWidget
|
||||
@@ -70,7 +70,7 @@ class TagDatabasePanel(PanelWidget):
|
||||
while self.scroll_layout.itemAt(0):
|
||||
self.scroll_layout.takeAt(0).widget().deleteLater()
|
||||
|
||||
tags = self.lib.search_tags(FilterState(path=query, page_size=self.tag_limit))
|
||||
tags = self.lib.search_tags(TagFilterState(search=query, page_size=self.tag_limit))
|
||||
|
||||
for tag in tags:
|
||||
container = QWidget()
|
||||
|
||||
@@ -17,7 +17,7 @@ from PySide6.QtWidgets import (
|
||||
QWidget,
|
||||
)
|
||||
from src.core.library import Library
|
||||
from src.core.library.alchemy.enums import FilterState
|
||||
from src.core.library.alchemy.enums import TagFilterState
|
||||
from src.core.palette import ColorType, get_tag_color
|
||||
from src.qt.widgets.panel import PanelWidget
|
||||
from src.qt.widgets.tag import TagWidget
|
||||
@@ -78,8 +78,8 @@ class TagSearchPanel(PanelWidget):
|
||||
self.scroll_layout.takeAt(0).widget().deleteLater()
|
||||
|
||||
found_tags = self.lib.search_tags(
|
||||
FilterState(
|
||||
path=name,
|
||||
TagFilterState(
|
||||
search=name,
|
||||
page_size=self.tag_limit,
|
||||
)
|
||||
)
|
||||
|
||||
@@ -4,7 +4,7 @@ from tempfile import TemporaryDirectory
|
||||
import pytest
|
||||
from src.core.enums import DefaultEnum, LibraryPrefs
|
||||
from src.core.library.alchemy import Entry, Library
|
||||
from src.core.library.alchemy.enums import FilterState
|
||||
from src.core.library.alchemy.enums import FilterState, TagFilterState
|
||||
from src.core.library.alchemy.fields import TextField, _FieldID
|
||||
from src.core.library.alchemy.models import Tag
|
||||
|
||||
@@ -133,17 +133,17 @@ def test_tag_search(library):
|
||||
tag = library.tags[0]
|
||||
|
||||
assert library.search_tags(
|
||||
FilterState(tag=tag.name.lower()),
|
||||
TagFilterState(search=tag.name.lower()),
|
||||
)
|
||||
|
||||
assert library.search_tags(
|
||||
FilterState(tag=tag.name.upper()),
|
||||
TagFilterState(search=tag.name.upper()),
|
||||
)
|
||||
|
||||
assert library.search_tags(FilterState(tag=tag.name[2:-2]))
|
||||
assert library.search_tags(TagFilterState(search=tag.name[2:-2]))
|
||||
|
||||
assert not library.search_tags(
|
||||
FilterState(tag=tag.name * 2),
|
||||
TagFilterState(search=tag.name * 2),
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user