From 6d10ab1ea1b641f3967488a910dff7e995c41f95 Mon Sep 17 00:00:00 2001 From: Aleksandr Balezin Date: Fri, 28 Apr 2023 17:54:26 +0300 Subject: [PATCH 1/2] fix new username field name --- zabbix/zabbix_api.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/zabbix/zabbix_api.py b/zabbix/zabbix_api.py index 032a173..acfa86d 100644 --- a/zabbix/zabbix_api.py +++ b/zabbix/zabbix_api.py @@ -79,6 +79,8 @@ def wrapper(self, method, opts): return self.do_request(self.json_obj(method, opts))['result'] return wrapper +def versiontuple(v): + return tuple(map(int, (v.split(".")))) class ZabbixAPIException(Exception): @@ -213,7 +215,11 @@ def login(self, user='', password='', save=True, api_token=None): hashed_pw_string = "md5(" + hashlib.md5(l_password.encode('utf-8')).hexdigest() + ")" self.debug(logging.DEBUG, "Trying to login with %s:%s" % (repr(l_user), repr(hashed_pw_string))) - obj = self.json_obj('user.login', {'user': l_user, 'password': l_password}, auth=False) + if versiontuple(self.api_version()) >= versiontuple('5.4'): + login_arg = {'username': l_user, 'password': l_password} + else: + login_arg = {'user': l_user, 'password': l_password} + obj = self.json_obj('user.login', login_arg, auth=False) result = self.do_request(obj) self.auth = result['result'] From 1cf7abb90c62c0726b101ac4e1dfcd66415d4c6e Mon Sep 17 00:00:00 2001 From: Aleksandr Balezin Date: Fri, 28 Apr 2023 19:06:48 +0300 Subject: [PATCH 2/2] fix --- zabbix/zabbix_api.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/zabbix/zabbix_api.py b/zabbix/zabbix_api.py index acfa86d..000f76f 100644 --- a/zabbix/zabbix_api.py +++ b/zabbix/zabbix_api.py @@ -79,8 +79,24 @@ def wrapper(self, method, opts): return self.do_request(self.json_obj(method, opts))['result'] return wrapper -def versiontuple(v): - return tuple(map(int, (v.split(".")))) + +def version_compare(v1, v2): + """ + The result is 0 if v1 == v2, -1 if v1 < v2, and +1 if v1 > v2 + """ + for v1_part, v2_part in zip(v1.split("."), v2.split(".")): + if v1_part.isdecimal() and v2_part.isdecimal(): + if int(v1_part) > int(v2_part): + return 1 + elif int(v1_part) < int(v2_part): + return -1 + else: + if v1 > v2: + return 1 + elif v1 < v2: + return -1 + return 0 + class ZabbixAPIException(Exception): @@ -215,7 +231,7 @@ def login(self, user='', password='', save=True, api_token=None): hashed_pw_string = "md5(" + hashlib.md5(l_password.encode('utf-8')).hexdigest() + ")" self.debug(logging.DEBUG, "Trying to login with %s:%s" % (repr(l_user), repr(hashed_pw_string))) - if versiontuple(self.api_version()) >= versiontuple('5.4'): + if version_compare(self.api_version(), '5.4') >= 0: login_arg = {'username': l_user, 'password': l_password} else: login_arg = {'user': l_user, 'password': l_password}