From 98729db0df508bc49b245e758fed7cc36b515e5f Mon Sep 17 00:00:00 2001 From: 72004 Date: Sun, 8 Nov 2026 01:10:03 +0500 Subject: [PATCH 1/2] Add a test for option values that contain a colon --- tests/utils/opts_test.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/utils/opts_test.py b/tests/utils/opts_test.py index 7e3466da..d0f9e525 100644 --- a/tests/utils/opts_test.py +++ b/tests/utils/opts_test.py @@ -48,6 +48,12 @@ def test_kv_to_map(self): self.assertEqual({"k": "v", "size": 4, "empty": False, "temperature": 0.5}, opts.kv_to_map(["k:'v'", "size:4", "empty:false", "temperature:0.5"])) + def test_kv_to_map_value_contains_colon(self): + # only the first colon separates key and value; URLs, passwords and times keep theirs + self.assertEqual({"source": "http://mirror:8080/docs.json"}, opts.kv_to_map(["source:'http://mirror:8080/docs.json'"])) + self.assertEqual({"basic_auth_password": "s3:cr3t"}, opts.kv_to_map(["basic_auth_password:s3:cr3t"])) + self.assertEqual({"bulk_size": 100, "start": "12:30"}, opts.to_dict("bulk_size:100,start:'12:30'")) + class GenericHelperFunctionTests(TestCase): def test_list_as_bulleted_list(self): From b1318082071b3003579ae733c19f7b2a51cdaa3b Mon Sep 17 00:00:00 2001 From: 72004 Date: Sun, 8 Nov 2026 01:11:58 +0500 Subject: [PATCH 2/2] Split key:value options on the first colon only --- solrorbit/utils/opts.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solrorbit/utils/opts.py b/solrorbit/utils/opts.py index e45fe637..9bf52f35 100644 --- a/solrorbit/utils/opts.py +++ b/solrorbit/utils/opts.py @@ -81,7 +81,7 @@ def convert(v): result = {} for kv in kvs: - k, v = kv.split(":") + k, v = kv.split(":", 1) # key is always considered a string, value needs to be converted result[k.strip()] = convert(v.strip()) return result