Skip to content

Commit 079d32a

Browse files
committed
Added condition for failure_type
1 parent e02ee97 commit 079d32a

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

airbyte_cdk/sources/declarative/manifest_declarative_source.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -357,12 +357,17 @@ def _dynamic_stream_configs(
357357
name = dynamic_stream.get("name")
358358

359359
if name in seen_dynamic_streams:
360-
error_message = f"Dynamic streams list contains a duplicate name: {name}. Please check your configuration."
360+
error_message = f"Dynamic streams list contains a duplicate name: {name}. Please contact Airbyte Support."
361+
failure_type = FailureType.system_error
362+
363+
if resolver_type == "ConfigComponentsResolverModel":
364+
error_message = f"Dynamic streams list contains a duplicate name: {name}. Please check your configuration."
365+
failure_type = FailureType.config_error
361366

362367
raise AirbyteTracedException(
363368
message=error_message,
364369
internal_message=error_message,
365-
failure_type=FailureType.config_error,
370+
failure_type=failure_type,
366371
)
367372

368373
seen_dynamic_streams.add(name)

unit_tests/sources/declarative/resolvers/test_http_components_resolver.py

+27
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
to_configured_stream,
2222
)
2323
from airbyte_cdk.test.mock_http import HttpMocker, HttpRequest, HttpResponse
24+
from airbyte_cdk.utils.traced_exception import AirbyteTracedException
2425

2526
_CONFIG = {"start_date": "2024-07-01T00:00:00.000Z"}
2627

@@ -192,3 +193,29 @@ def test_dynamic_streams_read_with_http_components_resolver():
192193
assert [stream.name for stream in actual_catalog.streams] == expected_stream_names
193194
assert len(records) == 2
194195
assert [record.stream for record in records] == expected_stream_names
196+
197+
198+
def test_duplicated_dynamic_streams_read_with_http_components_resolver():
199+
with HttpMocker() as http_mocker:
200+
http_mocker.get(
201+
HttpRequest(url="https://api.test.com/items"),
202+
HttpResponse(
203+
body=json.dumps(
204+
[
205+
{"id": 1, "name": "item_1"},
206+
{"id": 2, "name": "item_2"},
207+
{"id": 3, "name": "item_2"},
208+
]
209+
)
210+
),
211+
)
212+
213+
with pytest.raises(AirbyteTracedException) as exc_info:
214+
source = ConcurrentDeclarativeSource(
215+
source_config=_MANIFEST, config=_CONFIG, catalog=None, state=None
216+
)
217+
source.discover(logger=source.logger, config=_CONFIG)
218+
assert (
219+
str(exc_info.value)
220+
== "Dynamic streams list contains a duplicate name: item_2. Please contact Airbyte Support."
221+
)

0 commit comments

Comments
 (0)