chore: clear typehinting errors

This commit is contained in:
aclist committed 2026-11-10 10:02:41 +09:00
1 parent e03c6905c6
commit 0c4026daf8
13 files changed
+33 -43

No files matched your search

+2 -1
View File
@@ -111,7 +111,8 @@ class WorkshopACF(ACF):
def __init__(self, file: Path) -> None: def __init__(self, file: Path) -> None:
super().__init__(file) super().__init__(file)
def unpack(self, d: dict[str, str], lines: list[Any] = []) -> str: def unpack(self, d: dict[str, Any], lines: list[Any] = []) -> str:
self.indent: int
t1 = "AppWorkshop" t1 = "AppWorkshop"
t2 = ("WorkshopItemsInstalled", "WorkshopItemDetails") t2 = ("WorkshopItemsInstalled", "WorkshopItemDetails")
for k, v in d.items(): for k, v in d.items():
+6 -4
View File
@@ -111,7 +111,7 @@ def get_netmask() -> str:
# TODO: rename # TODO: rename
def test_ip(suffix: int, port: int, event: threading.Event) -> dict | None: def test_ip(suffix: int, port: int, event: threading.Event) -> dict[str, Any] | None:
if event.is_set(): if event.is_set():
return None return None
netmask = get_netmask() netmask = get_netmask()
@@ -139,7 +139,9 @@ def sanitize(name: str) -> str:
return name return name
def parse_json(json: list) -> list: def parse_json(
json: list[dict[str, Any]],
) -> list[tuple[str, str, str, str, int, int, int, str, int, int, str, bool]]:
""" """
Server metadata is underspecified and server operators Server metadata is underspecified and server operators
tend to insert random garbage in the headers. In case tend to insert random garbage in the headers. In case
@@ -507,14 +509,14 @@ def record_to_fqip(record: Record) -> str:
return f"{record.ip}:{record.gameport}:{record.qport}" return f"{record.ip}:{record.gameport}:{record.qport}"
def response_to_fqip(res: dict) -> str: def response_to_fqip(res: dict[str, Any]) -> str:
ip = res["addr"].split(":")[0] ip = res["addr"].split(":")[0]
gameport = res["gameport"] gameport = res["gameport"]
qport = res["addr"].split(":")[1] qport = res["addr"].split(":")[1]
return f"{ip}:{gameport}:{qport}" return f"{ip}:{gameport}:{qport}"
def response_to_record(res: dict) -> Record: def response_to_record(res: dict[str, Any]) -> Record:
ip = res["addr"].split(":")[0] ip = res["addr"].split(":")[0]
gameport = res["gameport"] gameport = res["gameport"]
qport = res["addr"].split(":")[1] qport = res["addr"].split(":")[1]
+3 -3
View File
@@ -77,7 +77,7 @@ class AppNavigation:
class Controller(GObject.GObject): class Controller(GObject.GObject):
def __init__(self) -> None: def __init__(self) -> None:
self.dist_cache: dict[str, "Haversine"] = {} self.dist_cache: dict[str, "Haversine" | None] = {}
self.mediator = AppNavigation() self.mediator = AppNavigation()
self.prefs: UserPrefs self.prefs: UserPrefs
@@ -355,10 +355,10 @@ class Controller(GObject.GObject):
filter_man.set_filter(filt, state) filter_man.set_filter(filt, state)
self.mediator.filters.set_filters(filters) self.mediator.filters.set_filters(filters)
def get_dist_cache(self) -> dict[str, "Haversine"]: def get_dist_cache(self) -> dict[str, Union["Haversine", None]]:
return self.dist_cache return self.dist_cache
def set_dist_cache(self, addr: str, haversine: "Haversine") -> None: def set_dist_cache(self, addr: str, haversine: Union["Haversine", None]) -> None:
self.dist_cache[addr] = haversine self.dist_cache[addr] = haversine
def get_map_store(self) -> Gtk.ListStore: def get_map_store(self) -> Gtk.ListStore:
+2 -3
View File
@@ -51,7 +51,6 @@ class FilterManager:
self.active_map = (0, all_maps) self.active_map = (0, all_maps)
self.prior_map = all_maps self.prior_map = all_maps
self.filters: list
self.enabled_filters = dict(self.default_filters) self.enabled_filters = dict(self.default_filters)
def get_tooltips(self) -> dict[str, str]: def get_tooltips(self) -> dict[str, str]:
@@ -75,7 +74,7 @@ class FilterManager:
def set_active_keyword(self, word: str) -> None: def set_active_keyword(self, word: str) -> None:
self.active_keyword = word self.active_keyword = word
def get_default_filters(self) -> dict: def get_default_filters(self) -> dict[str, bool]:
"""Deep copy of defaults""" """Deep copy of defaults"""
return dict(self.default_filters) return dict(self.default_filters)
@@ -116,7 +115,7 @@ class FilterManager:
def get_unique_maps(self) -> list[str]: def get_unique_maps(self) -> list[str]:
return [row[0] for row in self.map_store if row[0] != "All maps"] return [row[0] for row in self.map_store if row[0] != "All maps"]
def get_all_filters(self) -> tuple: def get_all_filters(self) -> tuple[str, ...]:
map_name = self.get_active_map_name() map_name = self.get_active_map_name()
enabled = self.get_filters() enabled = self.get_filters()
kw = self.get_active_keyword() kw = self.get_active_keyword()
+3 -7
View File
@@ -47,7 +47,7 @@ class ProxyModelManager:
def __init__(self, filter_man: "FilterManager") -> None: def __init__(self, filter_man: "FilterManager") -> None:
self.filter_cache: dict[ self.filter_cache: dict[
tuple[str], tuple[str, ...],
list[tuple[str, str, str, str, int, int, int, str, int, int, str, bool]], list[tuple[str, str, str, str, int, int, int, str, int, int, str, bool]],
] = {} ] = {}
@@ -68,9 +68,6 @@ class ProxyModelManager:
return False return False
return True return True
def append_row(self, row: list) -> None:
self.proxy_model.append(row)
def append_row_to_control( def append_row_to_control(
self, row: tuple[str, str, str, str, int, int, int, str, int, int, str, bool] self, row: tuple[str, str, str, str, int, int, int, str, int, int, str, bool]
) -> None: ) -> None:
@@ -84,7 +81,6 @@ class ProxyModelManager:
self.proxy_model[treeiter][4] = playercount.players self.proxy_model[treeiter][4] = playercount.players
self.proxy_model[treeiter][6] = playercount.queue self.proxy_model[treeiter][6] = playercount.queue
# TODO: use dataclass for record rows
def append_row_to_history( def append_row_to_history(
self, self,
history: tuple[str, str, str, str, int, int, int, str, int, int, str, bool], history: tuple[str, str, str, str, int, int, int, str, int, int, str, bool],
@@ -264,7 +260,7 @@ class ProxyModelManager:
rows = [row for row in rows if row[11]] rows = [row for row in rows if row[11]]
return rows return rows
def filter_toggle_on(self, filters: tuple[str]) -> list: def filter_toggle_on(self, filters: tuple[str, ...]) -> list:
"""Effectively applies all filters""" """Effectively applies all filters"""
self.set_filtered(self.control_model) self.set_filtered(self.control_model)
self.set_filtered(self.filter_map(filters)) self.set_filtered(self.filter_map(filters))
@@ -275,7 +271,7 @@ class ProxyModelManager:
self.set_filtered(self.filter_toggle_off(filters, f)) self.set_filtered(self.filter_toggle_off(filters, f))
return self.filtered return self.filtered
def set_cache(self, filters: tuple[str], filtered_rows: list[tuple]) -> None: def set_cache(self, filters: tuple[str, ...], filtered_rows: list[tuple]) -> None:
self.filter_cache[filters] = filtered_rows self.filter_cache[filters] = filtered_rows
def set_filtered(self, rows: list | None) -> None: def set_filtered(self, rows: list | None) -> None:
+2 -1
View File
@@ -1,4 +1,5 @@
import re import re
from typing import Any
from dzgui.util.localize import number from dzgui.util.localize import number
from dzgui.strings.generic import selectable_tree from dzgui.strings.generic import selectable_tree
@@ -60,7 +61,7 @@ def format_server_mods(mods: int) -> str:
return f"Found {mods:n} {plural}. {workshop}" return f"Found {mods:n} {plural}. {workshop}"
def format_player_count(model: Gtk.TreeModel | None, control: list) -> str: def format_player_count(model: Gtk.TreeModel | None, control: list[Any]) -> str:
players = 0 players = 0
hits: int hits: int
status: str status: str
+4 -10
View File
@@ -1,10 +1,8 @@
from typing import Callable, Literal, Self, TYPE_CHECKING, Union from typing import Callable, Literal, Self, TYPE_CHECKING, Union
from dzgui.util.clip import copy_clipboard from dzgui.util.clip import copy_clipboard
from dzgui.util.format import pluralize
from dzgui.strings import buttons from dzgui.strings import buttons
from dzgui.util.strings import ( from dzgui.util.strings import (
alert_button_tooltip,
atomic_buttons, atomic_buttons,
) )
from dzgui.const.constants import ( from dzgui.const.constants import (
@@ -14,7 +12,6 @@ from dzgui.const.constants import (
LIST_ADD, LIST_ADD,
REFRESH_ICON, REFRESH_ICON,
STEAM_ICON, STEAM_ICON,
WARNING,
WEB_BROWSER, WEB_BROWSER,
) )
from dzgui.strings import connect_panel from dzgui.strings import connect_panel
@@ -101,15 +98,14 @@ class LargeIconTextButton(IconButton):
class ClipboardButton(IconTextButton): class ClipboardButton(IconTextButton):
def __init__(self, controller: Union["Controller", None], func: Callable) -> None: def __init__(self, func: Callable[[], str]) -> None:
super().__init__(CLIPBOARD, atomic_buttons.copy) super().__init__(CLIPBOARD, atomic_buttons.copy)
self.controller = controller
self.connect("clicked", self._on_button_clicked, func) self.connect("clicked", self._on_button_clicked, func)
# TODO: strings # TODO: strings
self.set_tooltip_text("Copy to clipboard") self.set_tooltip_text("Copy to clipboard")
def _on_button_clicked(self, button: Self, func: Callable) -> None: def _on_button_clicked(self, button: Self, func: Callable[[], str]) -> None:
def revert() -> Literal[False]: def revert() -> Literal[False]:
self.revert_icon() self.revert_icon()
return False return False
@@ -120,10 +116,9 @@ class ClipboardButton(IconTextButton):
GLib.timeout_add(600, revert) GLib.timeout_add(600, revert)
# TODO: determine when controller would be passed to this button or drop
class CopyIpButton(ClipboardButton): class CopyIpButton(ClipboardButton):
def __init__(self, controller: Union["Controller", None], func: Callable) -> None: def __init__(self, func: Callable[[], str]) -> None:
super().__init__(controller, func) super().__init__(func)
# TODO: strings # TODO: strings
self.set_tooltip_text("Copy IP to clipboard") self.set_tooltip_text("Copy IP to clipboard")
@@ -252,7 +247,6 @@ class AddButton(IconTextButton):
self.set_tooltip_text(connect_panel.add_tooltip) self.set_tooltip_text(connect_panel.add_tooltip)
class SpinnerButton(Gtk.Button): class SpinnerButton(Gtk.Button):
def __init__(self, label: str) -> None: def __init__(self, label: str) -> None:
super().__init__() super().__init__()
+1 -1
View File
@@ -187,7 +187,7 @@ class FavPanel(Gtk.Frame):
self.fav_button = SteamConnectButton() self.fav_button = SteamConnectButton()
self.fav_button.connect("clicked", self._on_connect_clicked) self.fav_button.connect("clicked", self._on_connect_clicked)
self.copy_button = CopyIpButton(self.controller, self.get_fav_ip) self.copy_button = CopyIpButton(self.get_fav_ip)
# TODO: strings # TODO: strings
self.unset_button = CloseButton("Unset") self.unset_button = CloseButton("Unset")
+4 -5
View File
@@ -38,7 +38,7 @@ class ValidatedEntry(Gtk.Entry):
def __init__( def __init__(
self, self,
controller: "Controller", controller: "Controller",
func: Callable, func: Callable[[str], bool],
placeholder_text: str = "", placeholder_text: str = "",
tooltip_text: str = "", tooltip_text: str = "",
) -> None: ) -> None:
@@ -46,7 +46,6 @@ class ValidatedEntry(Gtk.Entry):
hexpand=True, placeholder_text=placeholder_text, tooltip_text=tooltip_text hexpand=True, placeholder_text=placeholder_text, tooltip_text=tooltip_text
) )
self.func: Callable
self.set_validation_func(func) self.set_validation_func(func)
self.controller = controller self.controller = controller
@@ -72,7 +71,7 @@ class ValidatedEntry(Gtk.Entry):
self.emit("string_validated", False) self.emit("string_validated", False)
remove_class(self, self.classname) remove_class(self, self.classname)
def set_validation_func(self, func: Callable) -> None: def set_validation_func(self, func: Callable[[str], bool]) -> None:
self.func = func self.func = func
def insert_icon(self) -> None: def insert_icon(self) -> None:
@@ -141,7 +140,7 @@ class APIEntry(Gtk.Box):
def __init__(self) -> None: def __init__(self) -> None:
super().__init__(orientation=Gtk.Orientation.HORIZONTAL, spacing=10) super().__init__(orientation=Gtk.Orientation.HORIZONTAL, spacing=10)
self.func: Callable | None = None self.func: Callable[[str], None] | None = None
# TODO: strings # TODO: strings
self.entry = Gtk.Entry( self.entry = Gtk.Entry(
@@ -222,7 +221,7 @@ class APIEntry(Gtk.Box):
res = self.func(text) res = self.func(text)
return res return res
def set_validation_func(self, func: Callable | None) -> None: def set_validation_func(self, func: Callable[[str], None] | None) -> None:
self.func = func self.func = func
def disable_button(self) -> None: def disable_button(self) -> None:
+2 -2
View File
@@ -30,7 +30,7 @@ class ButtonGrid(Gtk.Grid):
def __init__( def __init__(
self, self,
controller: "Controller", controller: "Controller",
defaults: dict[str, str], defaults: dict[str, bool],
tooltips: dict[str, str], tooltips: dict[str, str],
) -> None: ) -> None:
super().__init__( super().__init__(
@@ -96,7 +96,7 @@ class ButtonGrid(Gtk.Grid):
logger.info(f"User toggled button '{label}' to {state}") logger.info(f"User toggled button '{label}' to {state}")
self.emitter.emit("check_toggled", label, state) self.emitter.emit("check_toggled", label, state)
def get_checkboxes(self) -> list: def get_checkboxes(self) -> list[Gtk.CheckButton]:
return self.checks return self.checks
+1 -1
View File
@@ -105,7 +105,7 @@ class BootDialog(ColorAwareApp, Gtk.Dialog): # type: ignore
self.error_label = Gtk.Label(margin_start=15, margin_end=15) self.error_label = Gtk.Label(margin_start=15, margin_end=15)
# TODO: abstract class # TODO: abstract class
self.copy_button = ClipboardButton(None, lambda: self.error_label.get_text()) self.copy_button = ClipboardButton(self.error_label.get_text)
self.button_hbox = Gtk.Box( self.button_hbox = Gtk.Box(
orientation=Gtk.Orientation.HORIZONTAL, halign=Gtk.Align.CENTER, spacing=10 orientation=Gtk.Orientation.HORIZONTAL, halign=Gtk.Align.CENTER, spacing=10
) )
+1 -1
View File
@@ -187,7 +187,7 @@ class TextBufferDialog(GenericDialog):
secondary=secondary, secondary=secondary,
) )
self.text = text self.text = text
copy_button = ClipboardButton(controller, self.get_text) copy_button = ClipboardButton(self.get_text)
self.add_action_widget(copy_button, Gtk.ResponseType.NONE) self.add_action_widget(copy_button, Gtk.ResponseType.NONE)
self.add_button("OK", Gtk.ResponseType.OK) self.add_button("OK", Gtk.ResponseType.OK)
self.connect("response", self._on_response) self.connect("response", self._on_response)
+2 -4
View File
@@ -15,9 +15,7 @@ logger = logging.getLogger(APP_NAME)
class ContextMixin(TreeView): class ContextMixin(TreeView):
def present_menu( def present_menu(self, widget: Gtk.Widget, event: Gdk.Event) -> bool:
self, widget: Gtk.Widget, event: Gdk.Event
) -> bool:
if self.menu is None: if self.menu is None:
return False return False
@@ -26,7 +24,7 @@ class ContextMixin(TreeView):
match event.type: match event.type:
case Gdk.EventType.BUTTON_PRESS: case Gdk.EventType.BUTTON_PRESS:
if event.button != 3: if event.button != Gdk.BUTTON_SECONDARY: # type: ignore[comparison-overlap]
return False return False
self._process_button_event(event) # type: ignore self._process_button_event(event) # type: ignore
case Gdk.EventType.KEY_PRESS: case Gdk.EventType.KEY_PRESS: