[modules/publicip] handle missing public ip more gracefully

If location does not throw, but reports an empty public IP, return
"n/a".

Since this caused a bug, also add a test for it.

fixes #853
This commit is contained in:
tobi-wan-kenobi 2022-02-14 14:58:01 +01:00
parent b1f49f6a1e
commit 3aadab5628
2 changed files with 11 additions and 2 deletions

View file

@ -16,13 +16,13 @@ class Module(core.module.Module):
self.__ip = "" self.__ip = ""
def public_ip(self, widget): def public_ip(self, widget):
return self.__ip return self.__ip or "n/a"
def update(self): def update(self):
try: try:
self.__ip = util.location.public_ip() self.__ip = util.location.public_ip()
except Exception: except Exception:
self.__ip = "n/a" self.__ip = None
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

View file

@ -26,6 +26,15 @@ class PublicIPTest(TestCase):
assert widget(module).full_text() == '5.12.220.2' assert widget(module).full_text() == '5.12.220.2'
@mock.patch('util.location.public_ip')
def test_public_ip(self, public_ip_mock):
public_ip_mock.return_value = None
module = build_module()
module.update()
assert widget(module).full_text() == 'n/a'
@mock.patch('util.location.public_ip') @mock.patch('util.location.public_ip')
def test_public_ip_with_exception(self, public_ip_mock): def test_public_ip_with_exception(self, public_ip_mock):
public_ip_mock.side_effect = Exception public_ip_mock.side_effect = Exception