diff --git a/osc/store.py b/osc/store.py index 1d0199bb..fd6d306f 100644 --- a/osc/store.py +++ b/osc/store.py @@ -174,13 +174,22 @@ class Store: assert node.tag == node_name api.write_xml_node_to_file(node, path) + def _sanitize_apiurl(self, value): + # apiurl shouldn't end with a slash, strip it so we can use apiurl without modifications + # in config['api_host_options'][apiurl] and other places + if isinstance(value, str): + value = value.strip("/") + elif isinstance(value, bytes): + value = value.strip(b"/") + return value + @property def apiurl(self): - return self.read_string("_apiurl") + return self._sanitize_apiurl(self.read_string("_apiurl")) @apiurl.setter def apiurl(self, value): - self.write_string("_apiurl", value) + self.write_string("_apiurl", self._sanitize_apiurl(value)) @property def project(self): diff --git a/tests/test_store.py b/tests/test_store.py index d905c0ec..58a1e751 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -98,6 +98,14 @@ class TestStore(unittest.TestCase): store2 = Store(self.tmpdir) self.assertEqual(store2.apiurl, "https://example.com") + def test_apiurl_no_trailing_slash(self): + self.store.apiurl = "https://example.com/" + self.fileEquals("_apiurl", "https://example.com\n") + + self.store.write_string("_apiurl", "https://example.com/") + self.fileEquals("_apiurl", "https://example.com/\n") + self.assertEqual(self.store.apiurl, "https://example.com") + def test_package(self): self.fileEquals("_package", "package name\n")