Skip to content

Commit 7ebda95

Browse files
committed
add ignore for mypy multiple inheritence bug: python/mypy#9319
1 parent 60e8cb8 commit 7ebda95

File tree

3 files changed

+27
-19
lines changed

3 files changed

+27
-19
lines changed

src/napari_matplotlib/_layer_selection.py

+11-9
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
import typing
1+
from typing import List, Optional
22

33
import napari
44
import napari.layers
55
from magicgui import magicgui
66

7+
from .base import PlotWidgetProtocol
78

8-
@typing.no_type_check
9-
class LayerListSelection:
9+
10+
class LayerListSelection(PlotWidgetProtocol):
1011
def setup_selection_callbacks(self) -> None:
1112
"""
1213
Setup callbacks for:
@@ -22,7 +23,7 @@ def update_layers(self, event: napari.utils.events.Event) -> None:
2223
"""
2324
Update the layers attribute with currently selected layers and re-draw.
2425
"""
25-
self.layers = list(self.viewer.layers.selection)
26+
self.layers = list(self.viewer.layers.selection) # type: ignore
2627
self._on_update_layers()
2728
self._draw()
2829

@@ -35,9 +36,8 @@ def _on_update_layers(self) -> None:
3536
"""
3637

3738

38-
@typing.no_type_check
39-
class LayerComboBoxSelection:
40-
def add_layer_combo_box(self, widget_index: int = 0):
39+
class LayerComboBoxSelection(PlotWidgetProtocol):
40+
def add_layer_combo_box(self, widget_index: int = 0) -> None:
4141
self._layer_combobox = magicgui(
4242
self._select_layer,
4343
layer={"choices": self._get_valid_layers},
@@ -46,11 +46,13 @@ def add_layer_combo_box(self, widget_index: int = 0):
4646
self._layer_combobox()
4747
self.layout().insertWidget(widget_index, self._layer_combobox.native)
4848

49-
def _select_layer(self, layer: napari.layers.Layer):
49+
def _select_layer(self, layer: napari.layers.Layer) -> None:
5050
self.layers = [layer]
5151
self._on_update_layers()
5252

53-
def _get_valid_layers(self, combo_box):
53+
def _get_valid_layers(
54+
self, combo_box: Optional[int] = None
55+
) -> List[napari.layers.Layer]:
5456
return [
5557
layer
5658
for layer in self.viewer.layers

src/napari_matplotlib/base.py

+8-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import os
22
from pathlib import Path
3-
from typing import List, Tuple
3+
from typing import List, Protocol, Tuple
44

55
import matplotlib as mpl
66
import napari
@@ -28,6 +28,10 @@
2828
__all__ = ["NapariMPLWidget"]
2929

3030

31+
class PlotWidgetProtocol(Protocol, QWidget):
32+
viewer: napari.viewer.Viewer
33+
34+
3135
class NapariMPLWidget(QWidget):
3236
"""
3337
Base widget that can be embedded as a napari widget and contains a
@@ -62,7 +66,7 @@ def __init__(self, napari_viewer: napari.viewer.Viewer):
6266
self.toolbar = NapariNavigationToolbar(self.canvas, self)
6367
self._replace_toolbar_icons()
6468

65-
self._layers = []
69+
self._layers = [] # type: List[napari.layers.Layer]
6670

6771
self.setLayout(QVBoxLayout())
6872
self.layout().addWidget(self.toolbar)
@@ -76,11 +80,11 @@ def __init__(self, napari_viewer: napari.viewer.Viewer):
7680
input_layer_types: Tuple[napari.layers.Layer, ...] = (napari.layers.Layer,)
7781

7882
@property
79-
def layers(self):
83+
def layers(self) -> List[napari.layers.Layer]:
8084
return self._layers
8185

8286
@layers.setter
83-
def layers(self, layers: List[napari.layers.Layer]):
87+
def layers(self, layers: List[napari.layers.Layer]) -> None:
8488
self._layers = layers
8589
self._draw()
8690

src/napari_matplotlib/scatter.py

+8-6
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,9 @@ def _get_data(self) -> Tuple[List[np.ndarray], str, str]:
113113
return data, x_axis_name, y_axis_name
114114

115115

116-
class ScatterWidgetLayerListSelection(ScatterWidget, LayerListSelection):
116+
class ScatterWidgetLayerListSelection( # type: ignore
117+
ScatterWidget, LayerListSelection
118+
):
117119
def __init__(self, napari_viewer: napari.viewer.Viewer):
118120
super().__init__(napari_viewer)
119121
self.setup_selection_callbacks()
@@ -140,8 +142,8 @@ def __init__(self, napari_viewer: napari.viewer.Viewer):
140142
y_axis_key={"choices": self._get_valid_axis_keys},
141143
call_button="plot",
142144
)
143-
self._x_axis_key = None
144-
self._y_axis_key = None
145+
self._x_axis_key: Optional[str] = None
146+
self._y_axis_key: Optional[str] = None
145147

146148
self.layout().addWidget(self._key_selection_widget.native)
147149

@@ -239,16 +241,16 @@ def _on_update_layers(self) -> None:
239241
self._y_axis_key = None
240242

241243

242-
class FeatureScatterWidgetLayerListSelection(
244+
class FeatureScatterWidgetLayerListSelection( # type: ignore
243245
FeaturesScatterWidget, LayerListSelection
244-
):
246+
): # type: ignore
245247
def __init__(self, napari_viewer=napari.viewer.Viewer):
246248
super().__init__(napari_viewer)
247249
self.setup_selection_callbacks()
248250
self.update_layers(None)
249251

250252

251-
class FeatureScatterWidgetComboBoxSelection(
253+
class FeatureScatterWidgetComboBoxSelection( # type: ignore
252254
FeaturesScatterWidget, LayerComboBoxSelection
253255
):
254256
def __init__(self, napari_viewer=napari.viewer.Viewer):

0 commit comments

Comments
 (0)