diff --git a/meshtastic/__main__.py b/meshtastic/__main__.py index a4f2e11..f71567c 100644 --- a/meshtastic/__main__.py +++ b/meshtastic/__main__.py @@ -79,26 +79,15 @@ def getPref(attributes, name): print(f" {temp_name}") return - # okay - try to read the value - try: - try: - val = getattr(attributes, snake_name) - except TypeError: - # The getter didn't like our arg type guess try again as a string - val = getattr(attributes, snake_name) + # read the value + val = getattr(attributes, snake_name) - # succeeded! - if Globals.getInstance().get_camel_case(): - print(f"{camel_name}: {str(val)}") - logging.debug(f"{camel_name}: {str(val)}") - else: - print(f"{snake_name}: {str(val)}") - logging.debug(f"{snake_name}: {str(val)}") - except Exception as ex: - if Globals.getInstance().get_camel_case(): - print(f"Can't get {camel_name} due to {ex}") - else: - print(f"Can't get {snake_name} due to {ex}") + if Globals.getInstance().get_camel_case(): + print(f"{camel_name}: {str(val)}") + logging.debug(f"{camel_name}: {str(val)}") + else: + print(f"{snake_name}: {str(val)}") + logging.debug(f"{snake_name}: {str(val)}") def setPref(attributes, name, valStr): diff --git a/meshtastic/tests/test_main.py b/meshtastic/tests/test_main.py index d28fbd8..4448fef 100644 --- a/meshtastic/tests/test_main.py +++ b/meshtastic/tests/test_main.py @@ -1738,6 +1738,22 @@ def test_main_getPref_valid_field(capsys): assert err == '' +@pytest.mark.unit +@pytest.mark.usefixtures("reset_globals") +def test_main_getPref_valid_field_camel(capsys): + """Test getPref() with a valid field""" + Globals.getInstance().set_camel_case() + prefs = MagicMock() + prefs.DESCRIPTOR.fields_by_name.get.return_value = 'ls_secs' + prefs.wifi_ssid = 'foo' + prefs.ls_secs = 300 + prefs.fixed_position = False + + getPref(prefs, 'ls_secs') + out, err = capsys.readouterr() + assert re.search(r'lsSecs: 300', out, re.MULTILINE) + assert err == '' + @pytest.mark.unit @pytest.mark.usefixtures("reset_globals") def test_main_getPref_valid_field_string(capsys): @@ -1754,6 +1770,23 @@ def test_main_getPref_valid_field_string(capsys): assert err == '' +@pytest.mark.unit +@pytest.mark.usefixtures("reset_globals") +def test_main_getPref_valid_field_string_camel(capsys): + """Test getPref() with a valid field and value as a string""" + Globals.getInstance().set_camel_case() + prefs = MagicMock() + prefs.DESCRIPTOR.fields_by_name.get.return_value = 'wifi_ssid' + prefs.wifi_ssid = 'foo' + prefs.ls_secs = 300 + prefs.fixed_position = False + + getPref(prefs, 'wifi_ssid') + out, err = capsys.readouterr() + assert re.search(r'wifiSsid: foo', out, re.MULTILINE) + assert err == '' + + @pytest.mark.unit @pytest.mark.usefixtures("reset_globals") def test_main_getPref_valid_field_bool(capsys): @@ -1770,6 +1803,23 @@ def test_main_getPref_valid_field_bool(capsys): assert err == '' +@pytest.mark.unit +@pytest.mark.usefixtures("reset_globals") +def test_main_getPref_valid_field_bool_camel(capsys): + """Test getPref() with a valid field and value as a bool""" + Globals.getInstance().set_camel_case() + prefs = MagicMock() + prefs.DESCRIPTOR.fields_by_name.get.return_value = 'fixed_position' + prefs.wifi_ssid = 'foo' + prefs.ls_secs = 300 + prefs.fixed_position = False + + getPref(prefs, 'fixed_position') + out, err = capsys.readouterr() + assert re.search(r'fixedPosition: False', out, re.MULTILINE) + assert err == '' + + @pytest.mark.unit @pytest.mark.usefixtures("reset_globals") def test_main_getPref_invalid_field(capsys): @@ -1804,7 +1854,40 @@ def test_main_getPref_invalid_field(capsys): @pytest.mark.unit @pytest.mark.usefixtures("reset_globals") -def test_main_setPref_valid_field_int(capsys): +def test_main_getPref_invalid_field_camel(capsys): + """Test getPref() with an invalid field""" + Globals.getInstance().set_camel_case() + + class Field: + """Simple class for testing.""" + + def __init__(self, name): + """constructor""" + self.name = name + + prefs = MagicMock() + prefs.DESCRIPTOR.fields_by_name.get.return_value = None + + # Note: This is a subset of the real fields + ls_secs_field = Field('ls_secs') + is_router = Field('is_router') + fixed_position = Field('fixed_position') + + fields = [ ls_secs_field, is_router, fixed_position ] + prefs.DESCRIPTOR.fields = fields + + getPref(prefs, 'foo') + + out, err = capsys.readouterr() + assert re.search(r'does not have an attribute called foo', out, re.MULTILINE) + # ensure they are sorted + assert re.search(r'fixedPosition\s+isRouter\s+lsSecs', out, re.MULTILINE) + assert err == '' + + +@pytest.mark.unit +@pytest.mark.usefixtures("reset_globals") +def test_main_setPref_valid_field_int_as_string(capsys): """Test setPref() with a valid field""" class Field: @@ -1857,6 +1940,38 @@ def test_main_setPref_invalid_field(capsys): assert err == '' +@pytest.mark.unit +@pytest.mark.usefixtures("reset_globals") +def test_main_setPref_invalid_field_camel(capsys): + """Test setPref() with a invalid field""" + Globals.getInstance().set_camel_case() + + class Field: + """Simple class for testing.""" + + def __init__(self, name): + """constructor""" + self.name = name + + prefs = MagicMock() + prefs.DESCRIPTOR.fields_by_name.get.return_value = None + + # Note: This is a subset of the real fields + ls_secs_field = Field('ls_secs') + is_router = Field('is_router') + fixed_position = Field('fixed_position') + + fields = [ ls_secs_field, is_router, fixed_position ] + prefs.DESCRIPTOR.fields = fields + + setPref(prefs, 'foo', '300') + out, err = capsys.readouterr() + assert re.search(r'does not have an attribute called foo', out, re.MULTILINE) + # ensure they are sorted + assert re.search(r'fixedPosition\s+isRouter\s+lsSecs', out, re.MULTILINE) + assert err == '' + + @pytest.mark.unit @pytest.mark.usefixtures("reset_globals") def test_main_ch_set_psk_no_ch_index(capsys):