Skip to content

Commit 1ba72aa

Browse files
committed
Destination type lookup fallback in from_reference
1 parent 53b9435 commit 1ba72aa

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

dlt/common/destination/client.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,11 @@ def from_normalized_mapping(
142142
)
143143

144144

145+
@configspec
146+
class DestinationTypeConfiguration(BaseConfiguration):
147+
destination_type: Optional[str] = None
148+
149+
145150
@configspec
146151
class DestinationClientConfiguration(BaseConfiguration):
147152
destination_type: Annotated[str, NotResolved()] = dataclasses.field(

dlt/common/destination/reference.py

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,11 @@
2525
InvalidDestinationReference,
2626
UnknownDestinationModule,
2727
)
28-
from dlt.common.destination.client import DestinationClientConfiguration, JobClientBase
28+
from dlt.common.destination.client import (
29+
DestinationClientConfiguration,
30+
JobClientBase,
31+
DestinationTypeConfiguration,
32+
)
2933
from dlt.common.runtime.run_context import get_plugin_modules
3034
from dlt.common.schema.schema import Schema
3135
from dlt.common.typing import is_subclass
@@ -267,9 +271,30 @@ def from_reference(
267271
)
268272
return ref
269273

270-
return DestinationReference.from_reference(
271-
ref, credentials, destination_name, environment, **kwargs
272-
)
274+
try:
275+
return DestinationReference.from_reference(
276+
ref, credentials, destination_name, environment, **kwargs
277+
)
278+
except UnknownDestinationModule:
279+
if destination_name or "." in ref:
280+
raise
281+
282+
resolved_config = resolve_configuration(
283+
DestinationTypeConfiguration(),
284+
sections=(known_sections.DESTINATION, ref),
285+
accept_partial=True,
286+
)
287+
destination_type = getattr(resolved_config, "destination_type", None)
288+
if not destination_type:
289+
raise
290+
291+
return DestinationReference.from_reference(
292+
ref=resolved_config.destination_type,
293+
credentials=credentials,
294+
destination_name=ref,
295+
environment=environment,
296+
**kwargs,
297+
)
273298

274299

275300
class DestinationReference:

0 commit comments

Comments
 (0)