From ac0ea074d5684ac4f22b7787ce3b95f77f25e3e6 Mon Sep 17 00:00:00 2001 From: nico Date: Tue, 24 Nov 2020 23:37:00 +0100 Subject: fix: nodename quotation issue * update nodename method to not use regex anymore * update readme with 2 new columns for the exit code table We used quite the broad regex to parse the nodename from the status string. But we relied on a single quote to mark the starting point. It seems some distributions don't have this starting quote, therefore breaking the api. --- calls.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'calls.py') diff --git a/calls.py b/calls.py index 8c615b8..d4c8f2c 100644 --- a/calls.py +++ b/calls.py @@ -14,16 +14,26 @@ class EjabberdApiCalls(EjabberdApi): @property def nodename(self): if self._login is not None: - node_str = re.compile("The node '(.*)'") status = self.cmd("status", {}) + # "The node ejabberd@localhost is started with status: startedejabberd 20.07 is running in that node" - # matches try: - tmp = node_str.findall(status)[0] - # raise SystemExit code 17 if no status message is received - except TypeError: + tmp = status.split()[2] + + except AttributeError: + # emtpy response or None obj raise SystemExit(17) + except IndexError: + # status string differs from what we expect + log.warning("status string is different then expected") + tmp = "ejabberd@status-string-split-error" + pass + + # strip double quotations + if tmp.startswith("'"): + tmp = tmp.strip("'") + log.debug(f"fetched node string: {tmp}") return tmp -- cgit v1.2.3-18-g5258