From 46996d50e529b5f2f73f42db1d9058b923210623 Mon Sep 17 00:00:00 2001 From: VasigaranAndAngel <72515046+VasigaranAndAngel@users.noreply.github.com> Date: Mon, 31 Mar 2025 23:44:15 +0530 Subject: [PATCH] refactor: fix various missing and broken type hints (#901) * fix type hints * text_wrapper.py type fix and minor improvements * fields.py fixes --- src/tagstudio/qt/helpers/color_overlay.py | 2 +- src/tagstudio/qt/helpers/gradient.py | 4 +-- src/tagstudio/qt/helpers/text_wrapper.py | 9 +++--- src/tagstudio/qt/widgets/fields.py | 35 ++++++++++++----------- 4 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/tagstudio/qt/helpers/color_overlay.py b/src/tagstudio/qt/helpers/color_overlay.py index 0050447f..0c846b52 100644 --- a/src/tagstudio/qt/helpers/color_overlay.py +++ b/src/tagstudio/qt/helpers/color_overlay.py @@ -35,7 +35,7 @@ def theme_fg_overlay(image: Image.Image, use_alpha: bool = True) -> Image.Image: return _apply_overlay(image, im) -def gradient_overlay(image: Image.Image, gradient=list[str]) -> Image.Image: +def gradient_overlay(image: Image.Image, gradient: list[str]) -> Image.Image: """Overlay a color gradient onto an image. Args: diff --git a/src/tagstudio/qt/helpers/gradient.py b/src/tagstudio/qt/helpers/gradient.py index 5c9a2657..fee4f151 100644 --- a/src/tagstudio/qt/helpers/gradient.py +++ b/src/tagstudio/qt/helpers/gradient.py @@ -49,8 +49,8 @@ def four_corner_gradient( def linear_gradient( - size=tuple[int, int], - colors=list[str], + size: tuple[int, int], + colors: list[str], interpolation: Image.Resampling = Image.Resampling.BICUBIC, ) -> Image.Image: seed: Image.Image = Image.new(mode="RGBA", size=(len(colors), 1), color="#000000") diff --git a/src/tagstudio/qt/helpers/text_wrapper.py b/src/tagstudio/qt/helpers/text_wrapper.py index 401e2f89..71d6b5be 100644 --- a/src/tagstudio/qt/helpers/text_wrapper.py +++ b/src/tagstudio/qt/helpers/text_wrapper.py @@ -6,11 +6,11 @@ from PIL import Image, ImageDraw, ImageFont -def wrap_line( # type: ignore +def wrap_line( text: str, font: ImageFont.ImageFont, width: int = 256, - draw: ImageDraw.ImageDraw = None, + draw: ImageDraw.ImageDraw | None = None, ) -> int: """Take in a single text line and return the index it should be broken up at. @@ -27,15 +27,14 @@ def wrap_line( # type: ignore ): if draw.textlength(text[:i], font=font) < width: return i - else: - return -1 + return -1 def wrap_full_text( text: str, font: ImageFont.ImageFont, width: int = 256, - draw: ImageDraw.ImageDraw = None, + draw: ImageDraw.ImageDraw | None = None, ) -> str: """Break up a string to fit the canvas given a kerning value, font size, etc.""" lines = [] diff --git a/src/tagstudio/qt/widgets/fields.py b/src/tagstudio/qt/widgets/fields.py index 616a7f2f..c787110f 100644 --- a/src/tagstudio/qt/widgets/fields.py +++ b/src/tagstudio/qt/widgets/fields.py @@ -5,7 +5,7 @@ import math from pathlib import Path -from typing import Callable +from typing import Callable, override from warnings import catch_warnings import structlog @@ -54,9 +54,9 @@ class FieldContainer(QWidget): self.setObjectName("fieldContainer") self.title: str = title self.inline: bool = inline - self.copy_callback: Callable = None - self.edit_callback: Callable = None - self.remove_callback: Callable = None + self.copy_callback: Callable[[], None] | None = None + self.edit_callback: Callable[[], None] | None = None + self.remove_callback: Callable[[], None] | None = None button_size = 24 self.root_layout = QVBoxLayout(self) @@ -129,7 +129,7 @@ class FieldContainer(QWidget): self.set_title(title) self.setStyleSheet(FieldContainer.container_style) - def set_copy_callback(self, callback: Callable | None = None): + def set_copy_callback(self, callback: Callable[[], None] | None = None) -> None: with catch_warnings(record=True): self.copy_button.clicked.disconnect() @@ -137,7 +137,7 @@ class FieldContainer(QWidget): if callback: self.copy_button.clicked.connect(callback) - def set_edit_callback(self, callback: Callable | None = None): + def set_edit_callback(self, callback: Callable[[], None] | None = None) -> None: with catch_warnings(record=True): self.edit_button.clicked.disconnect() @@ -145,7 +145,7 @@ class FieldContainer(QWidget): if callback: self.edit_button.clicked.connect(callback) - def set_remove_callback(self, callback: Callable | None = None): + def set_remove_callback(self, callback: Callable[[], None] | None = None) -> None: with catch_warnings(record=True): self.remove_button.clicked.disconnect() @@ -153,7 +153,7 @@ class FieldContainer(QWidget): if callback: self.remove_button.clicked.connect(callback) - def set_inner_widget(self, widget: "FieldWidget"): + def set_inner_widget(self, widget: "FieldWidget") -> None: if self.field_layout.itemAt(0): old: QWidget = self.field_layout.itemAt(0).widget() self.field_layout.removeWidget(old) @@ -161,19 +161,20 @@ class FieldContainer(QWidget): self.field_layout.addWidget(widget) - def get_inner_widget(self): + def get_inner_widget(self) -> QWidget | None: if self.field_layout.itemAt(0): return self.field_layout.itemAt(0).widget() return None - def set_title(self, title: str): + def set_title(self, title: str) -> None: self.title = self.title = f"

{title}

" self.title_widget.setText(self.title) - def set_inline(self, inline: bool): + def set_inline(self, inline: bool) -> None: self.inline = inline - def enterEvent(self, event: QEnterEvent) -> None: # noqa: N802 + @override + def enterEvent(self, event: QEnterEvent) -> None: # NOTE: You could pass the hover event to the FieldWidget if needed. if self.copy_callback: self.copy_button.setHidden(False) @@ -183,7 +184,8 @@ class FieldContainer(QWidget): self.remove_button.setHidden(False) return super().enterEvent(event) - def leaveEvent(self, event: QEvent) -> None: # noqa: N802 + @override + def leaveEvent(self, event: QEvent) -> None: if self.copy_callback: self.copy_button.setHidden(True) if self.edit_callback: @@ -192,12 +194,13 @@ class FieldContainer(QWidget): self.remove_button.setHidden(True) return super().leaveEvent(event) - def resizeEvent(self, event: QResizeEvent) -> None: # noqa: N802 + @override + def resizeEvent(self, event: QResizeEvent) -> None: self.title_widget.setFixedWidth(int(event.size().width() // 1.5)) return super().resizeEvent(event) class FieldWidget(QWidget): - def __init__(self, title) -> None: + def __init__(self, title: str) -> None: super().__init__() - self.title = title + self.title: str = title