add missing types to sidebar.py

This commit is contained in:
Damien Elmes 2021-02-01 09:51:46 +10:00
parent 66c8ee3e0a
commit 328c86d3a5
2 changed files with 50 additions and 30 deletions

View file

@ -6,7 +6,17 @@ from __future__ import annotations
from concurrent.futures import Future from concurrent.futures import Future
from enum import Enum from enum import Enum
from typing import TYPE_CHECKING, Dict, Iterable, List, Optional, Sequence, Tuple, cast from typing import (
TYPE_CHECKING,
Any,
Dict,
Iterable,
List,
Optional,
Sequence,
Tuple,
cast,
)
import aqt import aqt
from anki.collection import ConfigBoolKey, SearchTerm from anki.collection import ConfigBoolKey, SearchTerm
@ -101,7 +111,7 @@ class SidebarModel(QAbstractItemModel):
self.root = root self.root = root
self._cache_rows(root) self._cache_rows(root)
def _cache_rows(self, node: SidebarItem): def _cache_rows(self, node: SidebarItem) -> None:
"Cache index of children in parent." "Cache index of children in parent."
for row, item in enumerate(node.children): for row, item in enumerate(node.children):
item.row_in_parent = row item.row_in_parent = row
@ -168,12 +178,12 @@ class SidebarModel(QAbstractItemModel):
else: else:
return QVariant(theme_manager.icon_from_resources(item.icon)) return QVariant(theme_manager.icon_from_resources(item.icon))
def supportedDropActions(self): def supportedDropActions(self) -> Qt.DropActions:
return Qt.MoveAction return cast(Qt.DropActions, Qt.MoveAction)
def flags(self, index: QModelIndex): def flags(self, index: QModelIndex) -> Qt.ItemFlags:
if not index.isValid(): if not index.isValid():
return Qt.ItemIsEnabled return cast(Qt.ItemFlags, Qt.ItemIsEnabled)
flags = Qt.ItemIsEnabled | Qt.ItemIsSelectable flags = Qt.ItemIsEnabled | Qt.ItemIsSelectable
item: SidebarItem = index.internalPointer() item: SidebarItem = index.internalPointer()
@ -183,7 +193,7 @@ class SidebarModel(QAbstractItemModel):
): ):
flags |= Qt.ItemIsDragEnabled | Qt.ItemIsDropEnabled flags |= Qt.ItemIsDragEnabled | Qt.ItemIsDropEnabled
return flags return cast(Qt.ItemFlags, flags)
# Helpers # Helpers
###################################################################### ######################################################################
@ -193,7 +203,9 @@ class SidebarModel(QAbstractItemModel):
return theme_manager.icon_from_resources(iconRef) return theme_manager.icon_from_resources(iconRef)
def expand_where_necessary(model: SidebarModel, tree: QTreeView, parent=None) -> None: def expand_where_necessary(
model: SidebarModel, tree: QTreeView, parent: Optional[QModelIndex] = None
) -> None:
parent = parent or QModelIndex() parent = parent or QModelIndex()
for row in range(model.rowCount(parent)): for row in range(model.rowCount(parent)):
idx = model.index(row, 0, parent) idx = model.index(row, 0, parent)
@ -213,7 +225,7 @@ class FilterModel(QSortFilterProxyModel):
class SidebarSearchBar(QLineEdit): class SidebarSearchBar(QLineEdit):
def __init__(self, sidebar: SidebarTreeView): def __init__(self, sidebar: SidebarTreeView) -> None:
QLineEdit.__init__(self, sidebar) QLineEdit.__init__(self, sidebar)
self.setPlaceholderText(sidebar.col.tr(TR.BROWSING_SIDEBAR_FILTER)) self.setPlaceholderText(sidebar.col.tr(TR.BROWSING_SIDEBAR_FILTER))
self.sidebar = sidebar self.sidebar = sidebar
@ -223,14 +235,14 @@ class SidebarSearchBar(QLineEdit):
qconnect(self.timer.timeout, self.onSearch) qconnect(self.timer.timeout, self.onSearch)
qconnect(self.textChanged, self.onTextChanged) qconnect(self.textChanged, self.onTextChanged)
def onTextChanged(self, text: str): def onTextChanged(self, text: str) -> None:
if not self.timer.isActive(): if not self.timer.isActive():
self.timer.start() self.timer.start()
def onSearch(self): def onSearch(self) -> None:
self.sidebar.search_for(self.text()) self.sidebar.search_for(self.text())
def keyPressEvent(self, evt): def keyPressEvent(self, evt: QKeyEvent) -> None:
if evt.key() in (Qt.Key_Up, Qt.Key_Down): if evt.key() in (Qt.Key_Up, Qt.Key_Down):
self.sidebar.setFocus() self.sidebar.setFocus()
elif evt.key() in (Qt.Key_Enter, Qt.Key_Return): elif evt.key() in (Qt.Key_Enter, Qt.Key_Return):
@ -293,7 +305,7 @@ class SidebarTreeView(QTreeView):
if not self.isVisible(): if not self.isVisible():
return return
def on_done(fut: Future): def on_done(fut: Future) -> None:
root = fut.result() root = fut.result()
model = SidebarModel(root) model = SidebarModel(root)
@ -308,7 +320,7 @@ class SidebarTreeView(QTreeView):
self.mw.taskman.run_in_background(self._root_tree, on_done) self.mw.taskman.run_in_background(self._root_tree, on_done)
def search_for(self, text: str): def search_for(self, text: str) -> None:
if not text.strip(): if not text.strip():
self.current_search = None self.current_search = None
self.refresh() self.refresh()
@ -331,7 +343,7 @@ class SidebarTreeView(QTreeView):
def drawRow( def drawRow(
self, painter: QPainter, options: QStyleOptionViewItem, idx: QModelIndex self, painter: QPainter, options: QStyleOptionViewItem, idx: QModelIndex
): ) -> None:
if self.current_search is None: if self.current_search is None:
return super().drawRow(painter, options, idx) return super().drawRow(painter, options, idx)
if not (item := self.model().item_for_index(idx)): if not (item := self.model().item_for_index(idx)):
@ -364,7 +376,7 @@ class SidebarTreeView(QTreeView):
if not source_ids: if not source_ids:
return False return False
def on_done(fut): def on_done(fut: Future) -> None:
fut.result() fut.result()
self.refresh() self.refresh()
@ -444,7 +456,7 @@ class SidebarTreeView(QTreeView):
collapse_key: ConfigBoolKeyValue, collapse_key: ConfigBoolKeyValue,
type: Optional[SidebarItemType] = None, type: Optional[SidebarItemType] = None,
) -> SidebarItem: ) -> SidebarItem:
def update(expanded: bool): def update(expanded: bool) -> None:
self.col.set_config_bool(collapse_key, not expanded) self.col.set_config_bool(collapse_key, not expanded)
top = SidebarItem( top = SidebarItem(
@ -486,7 +498,7 @@ class SidebarTreeView(QTreeView):
type=SidebarItemType.SAVED_SEARCH_ROOT, type=SidebarItemType.SAVED_SEARCH_ROOT,
) )
def on_click(): def on_click() -> None:
self.show_context_menu(root, None) self.show_context_menu(root, None)
root.onClick = on_click root.onClick = on_click
@ -503,10 +515,12 @@ class SidebarTreeView(QTreeView):
def _tag_tree(self, root: SidebarItem) -> None: def _tag_tree(self, root: SidebarItem) -> None:
icon = ":/icons/tag.svg" icon = ":/icons/tag.svg"
def render(root: SidebarItem, nodes: Iterable[TagTreeNode], head="") -> None: def render(
root: SidebarItem, nodes: Iterable[TagTreeNode], head: str = ""
) -> None:
for node in nodes: for node in nodes:
def toggle_expand(): def toggle_expand() -> Callable[[bool], None]:
full_name = head + node.name # pylint: disable=cell-var-from-loop full_name = head + node.name # pylint: disable=cell-var-from-loop
return lambda expanded: self.mw.col.tags.set_collapsed( return lambda expanded: self.mw.col.tags.set_collapsed(
full_name, not expanded full_name, not expanded
@ -537,10 +551,12 @@ class SidebarTreeView(QTreeView):
def _deck_tree(self, root: SidebarItem) -> None: def _deck_tree(self, root: SidebarItem) -> None:
icon = ":/icons/deck.svg" icon = ":/icons/deck.svg"
def render(root, nodes: Iterable[DeckTreeNode], head="") -> None: def render(
root: SidebarItem, nodes: Iterable[DeckTreeNode], head: str = ""
) -> None:
for node in nodes: for node in nodes:
def toggle_expand(): def toggle_expand() -> Callable[[bool], None]:
did = node.deck_id # pylint: disable=cell-var-from-loop did = node.deck_id # pylint: disable=cell-var-from-loop
return lambda _: self.mw.col.decks.collapseBrowser(did) return lambda _: self.mw.col.decks.collapseBrowser(did)
@ -613,7 +629,7 @@ class SidebarTreeView(QTreeView):
return return
self.show_context_menu(item, idx) self.show_context_menu(item, idx)
def show_context_menu(self, item: SidebarItem, idx: Optional[QModelIndex]): def show_context_menu(self, item: SidebarItem, idx: Optional[QModelIndex]) -> None:
m = QMenu() m = QMenu()
if item.item_type in self.context_menus: if item.item_type in self.context_menus:
@ -690,11 +706,11 @@ class SidebarTreeView(QTreeView):
def _remove_tag(self, item: "aqt.browser.SidebarItem") -> None: def _remove_tag(self, item: "aqt.browser.SidebarItem") -> None:
old_name = item.full_name old_name = item.full_name
def do_remove(): def do_remove() -> None:
self.mw.col.tags.remove(old_name) self.mw.col.tags.remove(old_name)
self.col.tags.rename(old_name, "") self.col.tags.rename(old_name, "")
def on_done(fut: Future): def on_done(fut: Future) -> None:
self.mw.requireReset(reason=ResetReason.BrowserRemoveTags, context=self) self.mw.requireReset(reason=ResetReason.BrowserRemoveTags, context=self)
self.browser.model.endReset() self.browser.model.endReset()
fut.result() fut.result()
@ -713,11 +729,11 @@ class SidebarTreeView(QTreeView):
if new_name == old_name or not new_name: if new_name == old_name or not new_name:
return return
def do_rename(): def do_rename() -> int:
self.mw.col.tags.remove(old_name) self.mw.col.tags.remove(old_name)
return self.col.tags.rename(old_name, new_name) return self.col.tags.rename(old_name, new_name)
def on_done(fut: Future): def on_done(fut: Future) -> None:
self.mw.requireReset(reason=ResetReason.BrowserAddTags, context=self) self.mw.requireReset(reason=ResetReason.BrowserAddTags, context=self)
self.browser.model.endReset() self.browser.model.endReset()
@ -739,10 +755,10 @@ class SidebarTreeView(QTreeView):
did = item.id did = item.id
if self.mw.deckBrowser.ask_delete_deck(did): if self.mw.deckBrowser.ask_delete_deck(did):
def do_delete(): def do_delete() -> None:
return self.mw.col.decks.rem(did, True) return self.mw.col.decks.rem(did, True)
def on_done(fut: Future): def on_done(fut: Future) -> None:
self.mw.requireReset(reason=ResetReason.BrowserDeleteDeck, context=self) self.mw.requireReset(reason=ResetReason.BrowserDeleteDeck, context=self)
self.browser.search() self.browser.search()
self.browser.model.endReset() self.browser.model.endReset()
@ -777,7 +793,7 @@ class SidebarTreeView(QTreeView):
self.col.set_config("savedFilters", conf) self.col.set_config("savedFilters", conf)
self.refresh() self.refresh()
def save_current_search(self, _item=None) -> None: def save_current_search(self, _item: Any = None) -> None:
try: try:
filt = self.col.build_search_string( filt = self.col.build_search_string(
self.browser.form.searchEdit.lineEdit().text() self.browser.form.searchEdit.lineEdit().text()

View file

@ -10,6 +10,10 @@ strict_equality = true
[mypy-aqt.browser] [mypy-aqt.browser]
disallow_untyped_defs=true disallow_untyped_defs=true
[mypy-aqt.sidebar]
disallow_untyped_defs=true
[mypy-aqt.mpv] [mypy-aqt.mpv]
ignore_errors=true ignore_errors=true