diff --git a/airbyte_cdk/sources/declarative/requesters/http_requester.py b/airbyte_cdk/sources/declarative/requesters/http_requester.py index 45671fc59..78c07b725 100644 --- a/airbyte_cdk/sources/declarative/requesters/http_requester.py +++ b/airbyte_cdk/sources/declarative/requesters/http_requester.py @@ -132,7 +132,7 @@ def get_url_base( stream_slice=stream_slice, next_page_token=next_page_token, ) - return os.path.join(self._url_base.eval(self.config, **interpolation_context), EmptyString) + return str(self._url_base.eval(self.config, **interpolation_context)) def get_path( self, @@ -370,13 +370,18 @@ def _join_url(cls, url_base: str, path: str) -> str: Example: 1) _join_url("https://example.com/api/", "endpoint") >> 'https://example.com/api/endpoint' 2) _join_url("https://example.com/api", "/endpoint") >> 'https://example.com/api/endpoint' - 3) _join_url("https://example.com/api/", "") >> 'https://example.com/api' + 3) _join_url("https://example.com/api/", "") >> 'https://example.com/api/' 4) _join_url("https://example.com/api", None) >> 'https://example.com/api' """ # return a full-url if provided directly from interpolation context if path == EmptyString or path is None: - return url_base.rstrip("/") + return url_base + else: + # since we didn't provide a full-url, the url_base might not have a trailing slash + # so we join the url_base and path correctly + if not url_base.endswith("/"): + url_base += "/" return urljoin(url_base, path) diff --git a/unit_tests/sources/declarative/requesters/test_http_requester.py b/unit_tests/sources/declarative/requesters/test_http_requester.py index dfe78011a..8fce688d7 100644 --- a/unit_tests/sources/declarative/requesters/test_http_requester.py +++ b/unit_tests/sources/declarative/requesters/test_http_requester.py @@ -121,7 +121,7 @@ def test_http_requester(): parameters={}, ) - assert requester.get_url_base() == "https://airbyte.io/" + assert requester.get_url_base() == "https://airbyte.io" assert ( requester.get_path(stream_state={}, stream_slice=stream_slice, next_page_token={}) == "v1/1234" @@ -145,9 +145,9 @@ def test_http_requester(): @pytest.mark.parametrize( "test_name, base_url, expected_base_url", [ - ("test_no_trailing_slash", "https://example.com", "https://example.com/"), + ("test_no_trailing_slash", "https://example.com", "https://example.com"), ("test_with_trailing_slash", "https://example.com/", "https://example.com/"), - ("test_with_v1_no_trailing_slash", "https://example.com/v1", "https://example.com/v1/"), + ("test_with_v1_no_trailing_slash", "https://example.com/v1", "https://example.com/v1"), ("test_with_v1_with_trailing_slash", "https://example.com/v1/", "https://example.com/v1/"), ], )