Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Check knob and button IDs separately for conflicts #105

Merged
merged 3 commits into from
Nov 8, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 15 additions & 4 deletions midi_app_controller/models/_tests/test_binds.py
Original file line number Diff line number Diff line change
@@ -59,6 +59,19 @@ def test_valid_binds(binds_data):
},
],
),
],
)
def test_binds_duplicate_id(binds_data, button_binds, knob_binds):
binds_data["button_binds"] = button_binds
binds_data["knob_binds"] = knob_binds

with pytest.raises(ValidationError):
Binds(**binds_data)


@pytest.mark.parametrize(
"button_binds, knob_binds",
[
(
[{"button_id": 1, "action_id": "Action1"}],
[
@@ -71,12 +84,10 @@ def test_valid_binds(binds_data):
),
],
)
def test_binds_duplicate_id(binds_data, button_binds, knob_binds):
def test_allow_knob_button_collision(binds_data, button_binds, knob_binds):
binds_data["button_binds"] = button_binds
binds_data["knob_binds"] = knob_binds

with pytest.raises(ValidationError):
Binds(**binds_data)
Binds(**binds_data)


@pytest.mark.parametrize("id", [-1, 128])
12 changes: 9 additions & 3 deletions midi_app_controller/models/binds.py
Original file line number Diff line number Diff line change
@@ -69,8 +69,14 @@ def check_duplicate_ids(cls, values):
button_ids = [bind.button_id for bind in values.button_binds]
knob_ids = [bind.knob_id for bind in values.knob_binds]

duplicate = find_duplicate(button_ids + knob_ids)
if duplicate is not None:
raise ValueError(f"id={duplicate} was bound to multiple actions")
duplicate_buttons = find_duplicate(button_ids)
if duplicate_buttons is not None:
raise ValueError(
f"button id={duplicate_buttons} was bound to multiple actions"
)

duplicate_knobs = find_duplicate(knob_ids)
if duplicate_knobs is not None:
raise ValueError(f"knob id={duplicate_knobs} was bound to multiple actions")

return values
3 changes: 2 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -35,7 +35,8 @@ midi-app-controller = "midi_app_controller:napari.yaml"
testing = [
"pytest>=8.2.0",
"pytest-cov>=5.0.0",
"pytest-qt>=4.0.2"
"pytest-qt>=4.0.2",
"flexparser!=0.4.0" # see https://napari.zulipchat.com/#narrow/channel/212875-general/topic/broken.20pint.2Fflexparser/near/481110284
]
dev = [
"midi-app-controller[testing]",
Loading