# Copyright: Ankitects Pty Ltd and contributors # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from __future__ import annotations from typing import TYPE_CHECKING, Any from anki.notes import NoteId if TYPE_CHECKING: from anki.collection import Collection class Finder: def __init__(self, col: Collection | None) -> None: self.col = col.weakref() print("Finder() is deprecated, please use col.find_cards() or .find_notes()") def findCards(self, query: Any, order: Any) -> Any: return self.col.find_cards(query, order) def findNotes(self, query: Any) -> Any: return self.col.find_notes(query) # Find and replace ########################################################################## def findReplace( col: Collection, nids: list[NoteId], src: str, dst: str, regex: bool = False, field: str | None = None, fold: bool = True, ) -> int: "Find and replace fields in a note. Returns changed note count." print("use col.find_and_replace() instead of findReplace()") return col.find_and_replace( note_ids=nids, search=src, replacement=dst, regex=regex, match_case=not fold, field_name=field, ).count def fieldNamesForNotes(col: Collection, nids: list[NoteId]) -> list[str]: return list(col.field_names_for_note_ids(nids)) # Find duplicates ########################################################################## def fieldNames(col: Collection, downcase: bool = True) -> list[str]: fields: set[str] = set() for m in col.models.all(): for f in m["flds"]: name = f["name"].lower() if downcase else f["name"] if name not in fields: # slower w/o fields.add(name) return list(fields)