From bcf00a1f8de079cb9be4af191fe8517b2969d9c1 Mon Sep 17 00:00:00 2001 From: Mike Kinney Date: Thu, 3 Mar 2022 17:11:22 -0800 Subject: [PATCH] handle ignore_incoming repeated field --- meshtastic/__main__.py | 21 +++++++++++---- meshtastic/tests/test_main.py | 48 +++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 5 deletions(-) diff --git a/meshtastic/__main__.py b/meshtastic/__main__.py index 17c7d5d..4c18660 100644 --- a/meshtastic/__main__.py +++ b/meshtastic/__main__.py @@ -139,11 +139,22 @@ def setPref(attributes, name, valStr): for temp_name in sorted(names): print(f" {temp_name}") return - try: - setattr(attributes, snake_name, val) - except TypeError: - # The setter didn't like our arg type guess try again as a string - setattr(attributes, snake_name, valStr) + + # note: 'ignore_incoming' is a repeating field + if snake_name != 'ignore_incoming': + try: + setattr(attributes, snake_name, val) + except TypeError: + # The setter didn't like our arg type guess try again as a string + setattr(attributes, snake_name, valStr) + else: + if val == 0: + # clear values + print("Clearing ignore_incoming list") + del attributes.ignore_incoming[:] + else: + print(f"Adding '{val}' to the ignore_incoming list") + attributes.ignore_incoming.extend([val]) if Globals.getInstance().get_camel_case(): print(f"Set {camel_name} to {valStr}") diff --git a/meshtastic/tests/test_main.py b/meshtastic/tests/test_main.py index 725f513..b7c2027 100644 --- a/meshtastic/tests/test_main.py +++ b/meshtastic/tests/test_main.py @@ -2331,6 +2331,54 @@ def test_main_setPref_invalid_field_camel(capsys): assert err == '' +@pytest.mark.unit +@pytest.mark.usefixtures("reset_globals") +def test_main_setPref_ignore_incoming_123(capsys): + """Test setPref() with ignore_incoming""" + + class Field: + """Simple class for testing.""" + + def __init__(self, name, enum_type): + """constructor""" + self.name = name + self.enum_type = enum_type + + ignore_incoming_field = Field('ignore_incoming', 'list') + prefs = MagicMock() + prefs.DESCRIPTOR.fields_by_name.get.return_value = ignore_incoming_field + + setPref(prefs, 'ignore_incoming', '123') + out, err = capsys.readouterr() + assert re.search(r"Adding '123' to the ignore_incoming list", out, re.MULTILINE) + assert re.search(r'Set ignore_incoming to 123', out, re.MULTILINE) + assert err == '' + + +@pytest.mark.unit +@pytest.mark.usefixtures("reset_globals") +def test_main_setPref_ignore_incoming_0(capsys): + """Test setPref() with ignore_incoming""" + + class Field: + """Simple class for testing.""" + + def __init__(self, name, enum_type): + """constructor""" + self.name = name + self.enum_type = enum_type + + ignore_incoming_field = Field('ignore_incoming', 'list') + prefs = MagicMock() + prefs.DESCRIPTOR.fields_by_name.get.return_value = ignore_incoming_field + + setPref(prefs, 'ignore_incoming', '0') + out, err = capsys.readouterr() + assert re.search(r'Clearing ignore_incoming list', out, re.MULTILINE) + assert re.search(r'Set ignore_incoming to 0', out, re.MULTILINE) + assert err == '' + + @pytest.mark.unit @pytest.mark.usefixtures("reset_globals") def test_main_ch_set_psk_no_ch_index(capsys):