From b372db8960f2c1b51b7a2a0a71b8b69c2be5a858 Mon Sep 17 00:00:00 2001 From: Bobbe <34186858+30350n@users.noreply.github.com> Date: Sun, 11 Feb 2024 22:01:28 +0100 Subject: [PATCH] Fix APICallMixin url_args handling (#6468) --- InvenTree/plugin/base/integration/APICallMixin.py | 5 ++++- InvenTree/plugin/base/integration/test_mixins.py | 15 +++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/InvenTree/plugin/base/integration/APICallMixin.py b/InvenTree/plugin/base/integration/APICallMixin.py index 67c8f165ce..77131f2491 100644 --- a/InvenTree/plugin/base/integration/APICallMixin.py +++ b/InvenTree/plugin/base/integration/APICallMixin.py @@ -2,6 +2,7 @@ import json as json_pkg import logging +from collections.abc import Iterable import requests @@ -107,7 +108,9 @@ class APICallMixin: """Returns an encoded path for the provided dict.""" groups = [] for key, val in arguments.items(): - groups.append(f'{key}={",".join([str(a) for a in val])}') + if isinstance(val, Iterable) and not isinstance(val, str): + val = ','.join([str(a) for a in val]) + groups.append(f'{key}={val}') return f'?{"&".join(groups)}' def api_call( diff --git a/InvenTree/plugin/base/integration/test_mixins.py b/InvenTree/plugin/base/integration/test_mixins.py index 95125bb6f5..ebee35999d 100644 --- a/InvenTree/plugin/base/integration/test_mixins.py +++ b/InvenTree/plugin/base/integration/test_mixins.py @@ -263,14 +263,17 @@ class APICallMixinTest(BaseMixinDefinition, TestCase): """Test that building up args work.""" # api_build_url_args # 1 arg - result = self.mixin.api_build_url_args({'a': 'b'}) - self.assertEqual(result, '?a=b') + result = self.mixin.api_build_url_args({'a': 'abc123'}) + self.assertEqual(result, '?a=abc123') + # non string arg + result = self.mixin.api_build_url_args({'a': 1}) + self.assertEqual(result, '?a=1') # more args - result = self.mixin.api_build_url_args({'a': 'b', 'c': 'd'}) - self.assertEqual(result, '?a=b&c=d') + result = self.mixin.api_build_url_args({'a': 'b', 'c': 42}) + self.assertEqual(result, '?a=b&c=42') # list args - result = self.mixin.api_build_url_args({'a': 'b', 'c': ['d', 'e', 'f']}) - self.assertEqual(result, '?a=b&c=d,e,f') + result = self.mixin.api_build_url_args({'a': 'b', 'c': ['d', 'efgh', 1337]}) + self.assertEqual(result, '?a=b&c=d,efgh,1337') def test_api_call(self): """Test that api calls work."""