Skip to content

Commit 8bb3d09

Browse files
fix: add mypy overrides for IoT drivers with optional dependencies
IoT drivers (gpio, mqtt, serial) use optional third-party packages that may not have stubs installed. Add per-module mypy overrides to: - Suppress import-not-found/import-untyped for gpiozero, paho, serial - Suppress warn_unused_ignores for driver module type:ignore comments - Cover both return-value and no-any-return in driver return ignores Tested: standard, iot, and full variants all pass ruff + mypy. Co-Authored-By: Claude <noreply@anthropic.com>
1 parent f81b695 commit 8bb3d09

4 files changed

Lines changed: 17 additions & 7 deletions

File tree

template/pyproject.toml.jinja

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,16 @@ strict = true
113113
warn_return_any = true
114114
warn_unused_configs = true
115115
mypy_path = "src"
116+
{%- if use_iot %}
117+
118+
[[tool.mypy.overrides]]
119+
module = ["gpiozero", "paho", "paho.*", "serial"]
120+
ignore_missing_imports = true
121+
122+
[[tool.mypy.overrides]]
123+
module = "{{ package_name }}.drivers.*"
124+
warn_unused_ignores = false
125+
{%- endif %}
116126
{% endif %}
117127

118128
[tool.pytest.ini_options]

template/src/project_name/drivers/gpio.py.jinja

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ def led(pin: int) -> DigitalOutput:
3838
Returns:
3939
A :class:`DigitalOutput` backed by :class:`~gpiozero.LED`.
4040
"""
41-
from gpiozero import LED # type: ignore[import-untyped]
41+
from gpiozero import LED
4242

43-
return LED(pin) # type: ignore[return-value]
43+
return LED(pin) # type: ignore[return-value,no-any-return]
4444

4545

4646
def button(pin: int, pull_up: bool = True) -> DigitalInput:
@@ -53,6 +53,6 @@ def button(pin: int, pull_up: bool = True) -> DigitalInput:
5353
Returns:
5454
A :class:`DigitalInput` backed by :class:`~gpiozero.Button`.
5555
"""
56-
from gpiozero import Button # type: ignore[import-untyped]
56+
from gpiozero import Button
5757

58-
return Button(pin, pull_up=pull_up) # type: ignore[return-value]
58+
return Button(pin, pull_up=pull_up) # type: ignore[return-value,no-any-return]

template/src/project_name/drivers/mqtt.py.jinja

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,6 @@ def create_client(client_id: str = "") -> MQTTClient:
3939
client.loop_start()
4040
client.publish("{{ project_name }}/telemetry", '{"temp": 21.5}')
4141
"""
42-
import paho.mqtt.client as mqtt # type: ignore[import-untyped]
42+
import paho.mqtt.client as mqtt
4343

44-
return mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=client_id) # type: ignore[return-value]
44+
return mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=client_id) # type: ignore[return-value,no-any-return]

template/src/project_name/drivers/serial.py.jinja

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,4 @@ def open_serial(port: str, baudrate: int = 115200, timeout: float = 1.0) -> Seri
3838
"""
3939
import serial # pyserial — imported lazily so tests don't require hardware
4040

41-
return serial.Serial(port, baudrate=baudrate, timeout=timeout) # type: ignore[return-value]
41+
return serial.Serial(port, baudrate=baudrate, timeout=timeout) # type: ignore[return-value,no-any-return]

0 commit comments

Comments
 (0)