69469c6428
* Add py3.9 to hooks
This follows examples from efb1ce46d4
I assume the
hooks were missed because those were not considered types but strings.
I did not even try to run pyupgrade and did the change manually, then used bazel format
* remove wildcard import in find.py, and change Any to object (dae)
69 lines
1.8 KiB
Python
69 lines
1.8 KiB
Python
# Copyright: Ankitects Pty Ltd and contributors
|
|
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|
|
|
# pylint: disable=invalid-name
|
|
|
|
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)
|