Skip to content

Commit 3b43eed

Browse files
committed
Fix lint errors
Create render_with_meta in order to clarify different function signatures
1 parent 0a277e7 commit 3b43eed

File tree

13 files changed

+77
-50
lines changed

13 files changed

+77
-50
lines changed

src/labelle/_vendor/matplotlib/font_manager.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
# - setWeights function needs improvement
2424
# - 'light' is an invalid weight value, remove it.
2525

26+
from typing import Set
2627
from collections import namedtuple
2728
from functools import lru_cache
2829
import logging
@@ -193,8 +194,8 @@ def win32FontDirectory():
193194
"""
194195
import winreg
195196
try:
196-
with winreg.OpenKey(winreg.HKEY_CURRENT_USER, MSFolders) as user:
197-
return winreg.QueryValueEx(user, 'Fonts')[0]
197+
with winreg.OpenKey(winreg.HKEY_CURRENT_USER, MSFolders) as user: # type: ignore[attr-defined]
198+
return winreg.QueryValueEx(user, 'Fonts')[0] # type: ignore[attr-defined]
198199
except OSError:
199200
return os.path.join(os.environ['WINDIR'], 'Fonts')
200201

@@ -205,17 +206,17 @@ def _get_win32_installed_fonts():
205206
items = set()
206207
# Search and resolve fonts listed in the registry.
207208
for domain, base_dirs in [
208-
(winreg.HKEY_LOCAL_MACHINE, [win32FontDirectory()]), # System.
209-
(winreg.HKEY_CURRENT_USER, MSUserFontDirectories), # User.
209+
(winreg.HKEY_LOCAL_MACHINE, [win32FontDirectory()]), # type: ignore[attr-defined] # System.
210+
(winreg.HKEY_CURRENT_USER, MSUserFontDirectories), # type: ignore[attr-defined] # User.
210211
]:
211212
for base_dir in base_dirs:
212213
for reg_path in MSFontDirectories:
213214
try:
214-
with winreg.OpenKey(domain, reg_path) as local:
215-
for j in range(winreg.QueryInfoKey(local)[1]):
215+
with winreg.OpenKey(domain, reg_path) as local: # type: ignore[attr-defined]
216+
for j in range(winreg.QueryInfoKey(local)[1]): # type: ignore[attr-defined]
216217
# value may contain the filename of the font or its
217218
# absolute path.
218-
key, value, tp = winreg.EnumValue(local, j)
219+
key, value, tp = winreg.EnumValue(local, j) # type: ignore[attr-defined]
219220
if not isinstance(value, str):
220221
continue
221222
try:
@@ -253,7 +254,7 @@ def findSystemFonts(fontpaths=None, fontext='ttf'):
253254
available. A list of TrueType fonts are returned by default with
254255
AFM fonts as an option.
255256
"""
256-
fontfiles = set()
257+
fontfiles: Set[str] = set()
257258
fontexts = get_fontext_synonyms(fontext)
258259

259260
if fontpaths is None:

src/labelle/cli/cli.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
PrintPreviewRenderEngine,
3535
QrRenderEngine,
3636
RenderContext,
37+
RenderEngine,
3738
TestPatternRenderEngine,
3839
TextRenderEngine,
3940
)
@@ -249,7 +250,7 @@ def run():
249250
if args.max_length is not None and args.max_length < args.min_length:
250251
raise CommandLineUsageError("Maximum length is less than minimum length")
251252

252-
render_engines = []
253+
render_engines: list[RenderEngine] = []
253254

254255
if args.test_pattern:
255256
render_engines.append(TestPatternRenderEngine(args.test_pattern))
@@ -306,6 +307,7 @@ def run():
306307
)
307308

308309
# print or show the label
310+
render: RenderEngine
309311
if args.preview or args.preview_inverted or args.imagemagick or args.browser:
310312
render = PrintPreviewRenderEngine(
311313
render_engine=render_engine,
@@ -336,7 +338,7 @@ def run():
336338
max_width_px=max_payload_len_px,
337339
min_width_px=min_payload_len_px,
338340
)
339-
bitmap, _ = render.render(render_context)
341+
bitmap, _ = render.render_with_meta(render_context)
340342

341343
device_manager = DeviceManager()
342344
device_manager.scan()

src/labelle/gui/q_device_selector.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
class QDeviceSelector(QToolBar):
1818
_device_manager: OnlineDeviceManager
19-
_selected_device: UsbDevice
19+
_selected_device: UsbDevice | None
2020

2121
selectedDeviceChangedSignal = QtCore.pyqtSignal(name="selectedDeviceChangedSignal")
2222

src/labelle/gui/q_label_widgets.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
PictureRenderEngine,
3030
QrRenderEngine,
3131
RenderContext,
32+
RenderEngine,
3233
TextRenderEngine,
3334
)
3435
from labelle.lib.render_engines.render_engine import RenderEngineException
@@ -372,6 +373,7 @@ def render_engine_impl(self):
372373
BarcodeWithTextRenderEngine).
373374
374375
"""
376+
render_engine: RenderEngine
375377
if self.show_text_checkbox.isChecked():
376378
render_engine = BarcodeWithTextRenderEngine(
377379
content=self.label.text(),

src/labelle/gui/q_labels_list.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import logging
2-
from typing import Literal, Optional
2+
from typing import Optional
33

44
from PIL import Image
55
from PyQt6 import QtCore
@@ -73,7 +73,7 @@ class QLabelList(QListWidget):
7373
)
7474
render_context: Optional[RenderContext]
7575
itemWidget: TextDymoLabelWidget
76-
dymo_labeler: DymoLabeler
76+
dymo_labeler: Optional[DymoLabeler]
7777
h_margin_mm: float
7878
min_label_width_mm: Optional[float]
7979
justify: str
@@ -89,6 +89,7 @@ def __init__(self, parent=None):
8989
self.setDragDropMode(QAbstractItemView.DragDropMode.InternalMove)
9090

9191
def populate(self):
92+
assert self.render_context is not None
9293
for item_widget in [TextDymoLabelWidget(self.render_context)]:
9394
item = QListWidgetItem(self)
9495
item.setSizeHint(item_widget.sizeHint())
@@ -113,7 +114,7 @@ def update_params(
113114
h_margin_mm: float,
114115
min_label_width_mm: float,
115116
render_context: RenderContext,
116-
justify: Literal["left", "center", "right"] = "center",
117+
justify: str = "center",
117118
):
118119
"""Update the render context used for rendering the label.
119120
@@ -148,6 +149,8 @@ def _payload_render_engine(self):
148149
return HorizontallyCombinedRenderEngine(render_engines=render_engines)
149150

150151
def render_preview(self):
152+
assert self.dymo_labeler is not None
153+
assert self.render_context is not None
151154
render_engine = PrintPreviewRenderEngine(
152155
render_engine=self._payload_render_engine,
153156
justify=self.justify,
@@ -165,6 +168,8 @@ def render_preview(self):
165168
self.renderPrintPreviewSignal.emit(bitmap)
166169

167170
def render_print(self):
171+
assert self.dymo_labeler is not None
172+
assert self.render_context is not None
168173
render_engine = PrintPayloadRenderEngine(
169174
render_engine=self._payload_render_engine,
170175
justify=self.justify,
@@ -174,7 +179,7 @@ def render_print(self):
174179
min_width_px=mm_to_px(self.min_label_width_mm),
175180
)
176181
try:
177-
bitmap, _ = render_engine.render(self.render_context)
182+
bitmap, _ = render_engine.render_with_meta(self.render_context)
178183
except RenderEngineException as err:
179184
crash_msg_box(self, "Render Engine Failed!", err)
180185
bitmap = EmptyRenderEngine().render(self.render_context)
@@ -193,6 +198,7 @@ def contextMenuEvent(self, event):
193198
event (QContextMenuEvent): The context menu event.
194199
195200
"""
201+
assert self.render_context is not None
196202
contextMenu = QMenu(self)
197203
add_text: Optional[QAction] = contextMenu.addAction("Add Text")
198204
add_qr: Optional[QAction] = contextMenu.addAction("Add QR")

src/labelle/gui/q_settings_toolbar.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def _init_elements(self):
5555

5656
def update_labeler_context(
5757
self,
58-
supported_tape_sizes: list[int],
58+
supported_tape_sizes: tuple[int, ...],
5959
installed_tape_size: int,
6060
minimum_horizontal_margin_mm: float,
6161
):

src/labelle/lib/devices/dymo_labeler.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ def _raw_print_label(self, lines: list[list[int]]):
235235

236236

237237
class DymoLabeler:
238-
_device: UsbDevice
238+
_device: UsbDevice | None
239239
tape_size_mm: int
240240

241241
LABELER_DISTANCE_BETWEEN_PRINT_HEAD_AND_CUTTER_MM = 8.1
@@ -284,7 +284,7 @@ def labeler_margin_px(self) -> tuple[float, float]:
284284
)
285285

286286
@property
287-
def device(self) -> UsbDevice:
287+
def device(self) -> UsbDevice | None:
288288
return self._device
289289

290290
@device.setter
@@ -340,7 +340,8 @@ def print(
340340
LOG.debug("Printing label..")
341341
self._functions.print_label(label_matrix)
342342
LOG.debug("Done printing.")
343-
self._device.dispose()
343+
if self._device is not None:
344+
self._device.dispose()
344345
LOG.debug("Cleaned up.")
345346
except POSSIBLE_USB_ERRORS as e:
346347
raise DymoLabelerPrintError(str(e)) from e

src/labelle/lib/render_engines/__init__.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,19 @@
1515
from labelle.lib.render_engines.text import TextRenderEngine
1616

1717
__all__ = [
18-
BarcodeRenderEngine,
19-
BarcodeWithTextRenderEngine,
20-
EmptyRenderEngine,
21-
HorizontallyCombinedRenderEngine,
22-
MarginsRenderEngine,
23-
NoContentError,
24-
NoPictureFilePath,
25-
PictureRenderEngine,
26-
PrintPayloadRenderEngine,
27-
PrintPreviewRenderEngine,
28-
QrRenderEngine,
29-
RenderContext,
30-
RenderEngine,
31-
TestPatternRenderEngine,
32-
TextRenderEngine,
18+
"BarcodeRenderEngine",
19+
"BarcodeWithTextRenderEngine",
20+
"EmptyRenderEngine",
21+
"HorizontallyCombinedRenderEngine",
22+
"MarginsRenderEngine",
23+
"NoContentError",
24+
"NoPictureFilePath",
25+
"PictureRenderEngine",
26+
"PrintPayloadRenderEngine",
27+
"PrintPreviewRenderEngine",
28+
"QrRenderEngine",
29+
"RenderContext",
30+
"RenderEngine",
31+
"TestPatternRenderEngine",
32+
"TextRenderEngine",
3333
]

src/labelle/lib/render_engines/horizontally_combined.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from __future__ import annotations
22

3+
from typing import Sequence
4+
35
from PIL import Image
46

57
from labelle.lib.render_engines.empty import EmptyRenderEngine
@@ -12,7 +14,7 @@ class HorizontallyCombinedRenderEngine(RenderEngine):
1214

1315
def __init__(
1416
self,
15-
render_engines: list[RenderEngine],
17+
render_engines: Sequence[RenderEngine],
1618
):
1719
super().__init__()
1820
self.render_engines = render_engines

src/labelle/lib/render_engines/margins.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def __init__(
2424
self,
2525
render_engine: RenderEngine,
2626
mode: Literal["print", "preview"],
27-
justify: Literal["left", "center", "right"] = "center",
27+
justify: str = "center",
2828
visible_horizontal_margin_px: float = 0,
2929
labeler_margin_px: tuple[float, float] = (0, 0),
3030
max_width_px: float | None = None,
@@ -53,7 +53,7 @@ def __init__(
5353

5454
def _calculate_visible_width(self, payload_width_px: int) -> float:
5555
minimal_label_width_px = (
56-
payload_width_px + self.visible_horizontal_margin_px * 2
56+
payload_width_px + self.visible_horizontal_margin_px * 2.0
5757
)
5858
if self.max_width_px is not None and minimal_label_width_px > self.max_width_px:
5959
raise BitmapTooBigError(minimal_label_width_px, self.max_width_px)
@@ -64,7 +64,12 @@ def _calculate_visible_width(self, payload_width_px: int) -> float:
6464
label_width_px = minimal_label_width_px
6565
return label_width_px
6666

67-
def render(self, context: RenderContext) -> tuple[Image.Image, dict[str, float]]:
67+
def render(self, _: RenderContext) -> Image.Image:
68+
raise RuntimeError("This should never be called")
69+
70+
def render_with_meta(
71+
self, context: RenderContext
72+
) -> tuple[Image.Image, dict[str, float]]:
6873
payload_bitmap = self.render_engine.render(context)
6974
payload_width_px = payload_bitmap.width
7075
label_width_px = self._calculate_visible_width(payload_width_px)
@@ -102,10 +107,12 @@ def render(self, context: RenderContext) -> tuple[Image.Image, dict[str, float]]
102107
# print head is already in offset from label's edge under the cutter
103108
horizontal_offset_px -= self.labeler_horizontal_margin_px
104109
# no need to add vertical margins to bitmap
105-
bitmap_height = payload_bitmap.height
110+
bitmap_height = float(payload_bitmap.height)
106111
elif self.mode == "preview":
107112
# add vertical margins to bitmap
108-
bitmap_height = payload_bitmap.height + self.labeler_vertical_margin_px * 2
113+
bitmap_height = (
114+
float(payload_bitmap.height) + self.labeler_vertical_margin_px * 2.0
115+
)
109116
vertical_offset_px = self.labeler_vertical_margin_px
110117

111118
bitmap = Image.new("1", (math.ceil(label_width_px), math.ceil(bitmap_height)))

0 commit comments

Comments
 (0)