dagster-airbyte 0.26.18__py3-none-any.whl → 0.28.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,10 @@
1
1
  from dagster_shared.libraries import DagsterLibraryRegistry
2
2
 
3
+ from dagster_airbyte.components.workspace_component.component import (
4
+ AirbyteCloudWorkspaceComponent as AirbyteCloudWorkspaceComponent,
5
+ AirbyteWorkspaceComponent as AirbyteWorkspaceComponent,
6
+ )
7
+
3
8
  try:
4
9
  from dagster_airbyte.managed import (
5
10
  AirbyteConnection as AirbyteConnection,
@@ -20,13 +25,17 @@ from dagster_airbyte.asset_defs import (
20
25
  build_airbyte_assets_definitions as build_airbyte_assets_definitions,
21
26
  load_assets_from_airbyte_instance as load_assets_from_airbyte_instance,
22
27
  )
23
- from dagster_airbyte.ops import airbyte_sync_op as airbyte_sync_op
24
- from dagster_airbyte.resources import (
28
+ from dagster_airbyte.legacy_resources import (
25
29
  AirbyteCloudResource as AirbyteCloudResource,
26
- AirbyteCloudWorkspace as AirbyteCloudWorkspace,
27
30
  AirbyteResource as AirbyteResource,
28
31
  airbyte_cloud_resource as airbyte_cloud_resource,
29
32
  airbyte_resource as airbyte_resource,
33
+ )
34
+ from dagster_airbyte.ops import airbyte_sync_op as airbyte_sync_op
35
+ from dagster_airbyte.resources import (
36
+ AirbyteCloudWorkspace as AirbyteCloudWorkspace,
37
+ AirbyteWorkspace as AirbyteWorkspace,
38
+ load_airbyte_asset_specs as load_airbyte_asset_specs,
30
39
  load_airbyte_cloud_asset_specs as load_airbyte_cloud_asset_specs,
31
40
  )
32
41
  from dagster_airbyte.translator import (
@@ -1,10 +1,11 @@
1
- from typing import Any, Callable, Optional
1
+ from collections.abc import Callable
2
+ from typing import Any, Optional, Union
2
3
 
3
4
  from dagster import AssetsDefinition, multi_asset
4
5
  from dagster._annotations import beta
5
6
  from dagster._core.errors import DagsterInvariantViolationError
6
7
 
7
- from dagster_airbyte.resources import AirbyteCloudWorkspace
8
+ from dagster_airbyte.resources import AirbyteCloudWorkspace, AirbyteWorkspace
8
9
  from dagster_airbyte.translator import AirbyteMetadataSet, DagsterAirbyteTranslator
9
10
 
10
11
 
@@ -12,7 +13,7 @@ from dagster_airbyte.translator import AirbyteMetadataSet, DagsterAirbyteTransla
12
13
  def airbyte_assets(
13
14
  *,
14
15
  connection_id: str,
15
- workspace: AirbyteCloudWorkspace,
16
+ workspace: Union[AirbyteWorkspace, AirbyteCloudWorkspace],
16
17
  name: Optional[str] = None,
17
18
  group_name: Optional[str] = None,
18
19
  dagster_airbyte_translator: Optional[DagsterAirbyteTranslator] = None,
@@ -21,7 +22,7 @@ def airbyte_assets(
21
22
 
22
23
  Args:
23
24
  connection_id (str): The Airbyte Connection ID.
24
- workspace (AirbyteCloudWorkspace): The Airbyte workspace to fetch assets from.
25
+ workspace (Union[AirbyteWorkspace, AirbyteCloudWorkspace]): The Airbyte workspace to fetch assets from.
25
26
  name (Optional[str], optional): The name of the op.
26
27
  group_name (Optional[str], optional): The name of the asset group.
27
28
  dagster_airbyte_translator (Optional[DagsterAirbyteTranslator], optional): The translator to use
@@ -2,10 +2,10 @@ import hashlib
2
2
  import inspect
3
3
  import os
4
4
  from abc import abstractmethod
5
- from collections.abc import Iterable, Mapping, Sequence
5
+ from collections.abc import Callable, Iterable, Mapping, Sequence
6
6
  from functools import partial
7
7
  from itertools import chain
8
- from typing import Any, Callable, NamedTuple, Optional, Union, cast
8
+ from typing import Any, NamedTuple, Optional, Union, cast
9
9
 
10
10
  import yaml
11
11
  from dagster import (
@@ -13,16 +13,16 @@ from dagster import (
13
13
  AssetKey,
14
14
  AssetOut,
15
15
  AutoMaterializePolicy,
16
- FreshnessPolicy,
16
+ LegacyFreshnessPolicy,
17
17
  Nothing,
18
18
  Output,
19
19
  ResourceDefinition,
20
20
  SourceAsset,
21
21
  _check as check,
22
22
  )
23
- from dagster._annotations import beta
23
+ from dagster._annotations import beta, hidden_param, only_allow_hidden_params_in_kwargs, superseded
24
24
  from dagster._core.definitions import AssetsDefinition, multi_asset
25
- from dagster._core.definitions.cacheable_assets import (
25
+ from dagster._core.definitions.assets.definition.cacheable_assets_definition import (
26
26
  AssetsDefinitionCacheableData,
27
27
  CacheableAssetsDefinition,
28
28
  )
@@ -34,13 +34,17 @@ from dagster._core.execution.context.init import build_init_resource_context
34
34
  from dagster._utils.merger import merge_dicts
35
35
 
36
36
  from dagster_airbyte.asset_decorator import airbyte_assets
37
- from dagster_airbyte.resources import (
37
+ from dagster_airbyte.legacy_resources import (
38
38
  AirbyteCloudResource,
39
- AirbyteCloudWorkspace,
40
39
  AirbyteResource,
41
40
  BaseAirbyteResource,
42
41
  )
43
- from dagster_airbyte.translator import AirbyteMetadataSet, DagsterAirbyteTranslator
42
+ from dagster_airbyte.resources import AirbyteCloudWorkspace, AirbyteWorkspace, BaseAirbyteWorkspace
43
+ from dagster_airbyte.translator import (
44
+ AirbyteConnection,
45
+ AirbyteMetadataSet,
46
+ DagsterAirbyteTranslator,
47
+ )
44
48
  from dagster_airbyte.types import AirbyteTableMetadata
45
49
  from dagster_airbyte.utils import (
46
50
  clean_name,
@@ -68,7 +72,7 @@ def _build_airbyte_asset_defn_metadata(
68
72
  group_name: Optional[str] = None,
69
73
  io_manager_key: Optional[str] = None,
70
74
  schema_by_table_name: Optional[Mapping[str, TableSchema]] = None,
71
- freshness_policy: Optional[FreshnessPolicy] = None,
75
+ legacy_freshness_policy: Optional[LegacyFreshnessPolicy] = None,
72
76
  auto_materialize_policy: Optional[AutoMaterializePolicy] = None,
73
77
  ) -> AssetsDefinitionCacheableData:
74
78
  asset_key_prefix = (
@@ -157,8 +161,10 @@ def _build_airbyte_asset_defn_metadata(
157
161
  for table in tables
158
162
  }
159
163
  ),
160
- freshness_policies_by_output_name=(
161
- {output: freshness_policy for output in outputs} if freshness_policy else None
164
+ legacy_freshness_policies_by_output_name=(
165
+ {output: legacy_freshness_policy for output in outputs}
166
+ if legacy_freshness_policy
167
+ else None
162
168
  ),
163
169
  auto_materialize_policies_by_output_name=(
164
170
  {output: auto_materialize_policy for output in outputs}
@@ -198,9 +204,9 @@ def _build_airbyte_assets_from_metadata(
198
204
  else None
199
205
  ),
200
206
  io_manager_key=io_manager_key,
201
- freshness_policy=(
202
- assets_defn_meta.freshness_policies_by_output_name.get(k)
203
- if assets_defn_meta.freshness_policies_by_output_name
207
+ legacy_freshness_policy=(
208
+ assets_defn_meta.legacy_freshness_policies_by_output_name.get(k)
209
+ if assets_defn_meta.legacy_freshness_policies_by_output_name
204
210
  else None
205
211
  ),
206
212
  dagster_type=Nothing,
@@ -245,6 +251,14 @@ def _build_airbyte_assets_from_metadata(
245
251
  return _assets
246
252
 
247
253
 
254
+ @hidden_param(
255
+ param="legacy_freshness_policy",
256
+ breaking_version="1.13.0",
257
+ )
258
+ @hidden_param(
259
+ param="auto_materialize_policy",
260
+ breaking_version="1.10.0",
261
+ )
248
262
  def build_airbyte_assets(
249
263
  connection_id: str,
250
264
  destination_tables: Sequence[str],
@@ -256,9 +270,8 @@ def build_airbyte_assets(
256
270
  deps: Optional[Iterable[Union[CoercibleToAssetKey, AssetsDefinition, SourceAsset]]] = None,
257
271
  upstream_assets: Optional[set[AssetKey]] = None,
258
272
  schema_by_table_name: Optional[Mapping[str, TableSchema]] = None,
259
- freshness_policy: Optional[FreshnessPolicy] = None,
260
273
  stream_to_asset_map: Optional[Mapping[str, str]] = None,
261
- auto_materialize_policy: Optional[AutoMaterializePolicy] = None,
274
+ **kwargs,
262
275
  ) -> Sequence[AssetsDefinition]:
263
276
  """Builds a set of assets representing the tables created by an Airbyte sync operation.
264
277
 
@@ -278,11 +291,13 @@ def build_airbyte_assets(
278
291
  deps (Optional[Sequence[Union[AssetsDefinition, SourceAsset, str, AssetKey]]]):
279
292
  A list of assets to add as sources.
280
293
  upstream_assets (Optional[Set[AssetKey]]): Deprecated, use deps instead. A list of assets to add as sources.
281
- freshness_policy (Optional[FreshnessPolicy]): A freshness policy to apply to the assets
282
294
  stream_to_asset_map (Optional[Mapping[str, str]]): A mapping of an Airbyte stream name to a Dagster asset.
283
295
  This allows the use of the "prefix" setting in Airbyte with special characters that aren't valid asset names.
284
- auto_materialize_policy (Optional[AutoMaterializePolicy]): An auto materialization policy to apply to the assets.
285
296
  """
297
+ only_allow_hidden_params_in_kwargs(build_airbyte_assets, kwargs)
298
+ legacy_freshness_policy = kwargs.get("legacy_freshness_policy")
299
+ auto_materialize_policy = kwargs.get("auto_materialize_policy")
300
+
286
301
  if upstream_assets is not None and deps is not None:
287
302
  raise DagsterInvalidDefinitionError(
288
303
  "Cannot specify both deps and upstream_assets to build_airbyte_assets. Use only deps"
@@ -325,7 +340,7 @@ def build_airbyte_assets(
325
340
  ),
326
341
  }
327
342
  ),
328
- freshness_policy=freshness_policy,
343
+ legacy_freshness_policy=legacy_freshness_policy,
329
344
  auto_materialize_policy=auto_materialize_policy,
330
345
  )
331
346
  for table in tables
@@ -588,7 +603,7 @@ class AirbyteCoreCacheableAssetsDefinition(CacheableAssetsDefinition):
588
603
  connection_filter: Optional[Callable[[AirbyteConnectionMetadata], bool]],
589
604
  connection_to_asset_key_fn: Optional[Callable[[AirbyteConnectionMetadata, str], AssetKey]],
590
605
  connection_to_freshness_policy_fn: Optional[
591
- Callable[[AirbyteConnectionMetadata], Optional[FreshnessPolicy]]
606
+ Callable[[AirbyteConnectionMetadata], Optional[LegacyFreshnessPolicy]]
592
607
  ],
593
608
  connection_to_auto_materialize_policy_fn: Optional[
594
609
  Callable[[AirbyteConnectionMetadata], Optional[AutoMaterializePolicy]]
@@ -671,7 +686,7 @@ class AirbyteCoreCacheableAssetsDefinition(CacheableAssetsDefinition):
671
686
  ),
672
687
  schema_by_table_name=schema_by_table_name,
673
688
  table_to_asset_key_fn=table_to_asset_key,
674
- freshness_policy=self._connection_to_freshness_policy_fn(connection),
689
+ legacy_freshness_policy=self._connection_to_freshness_policy_fn(connection),
675
690
  auto_materialize_policy=self._connection_to_auto_materialize_policy_fn(connection),
676
691
  )
677
692
 
@@ -704,7 +719,7 @@ class AirbyteInstanceCacheableAssetsDefinition(AirbyteCoreCacheableAssetsDefinit
704
719
  connection_filter: Optional[Callable[[AirbyteConnectionMetadata], bool]],
705
720
  connection_to_asset_key_fn: Optional[Callable[[AirbyteConnectionMetadata, str], AssetKey]],
706
721
  connection_to_freshness_policy_fn: Optional[
707
- Callable[[AirbyteConnectionMetadata], Optional[FreshnessPolicy]]
722
+ Callable[[AirbyteConnectionMetadata], Optional[LegacyFreshnessPolicy]]
708
723
  ],
709
724
  connection_to_auto_materialize_policy_fn: Optional[
710
725
  Callable[[AirbyteConnectionMetadata], Optional[AutoMaterializePolicy]]
@@ -818,7 +833,7 @@ class AirbyteYAMLCacheableAssetsDefinition(AirbyteCoreCacheableAssetsDefinition)
818
833
  connection_directories: Optional[Sequence[str]],
819
834
  connection_to_asset_key_fn: Optional[Callable[[AirbyteConnectionMetadata, str], AssetKey]],
820
835
  connection_to_freshness_policy_fn: Optional[
821
- Callable[[AirbyteConnectionMetadata], Optional[FreshnessPolicy]]
836
+ Callable[[AirbyteConnectionMetadata], Optional[LegacyFreshnessPolicy]]
822
837
  ],
823
838
  connection_to_auto_materialize_policy_fn: Optional[
824
839
  Callable[[AirbyteConnectionMetadata], Optional[AutoMaterializePolicy]]
@@ -894,6 +909,11 @@ class AirbyteYAMLCacheableAssetsDefinition(AirbyteCoreCacheableAssetsDefinition)
894
909
  return output_connections
895
910
 
896
911
 
912
+ @superseded(
913
+ additional_warn_text=(
914
+ "If you are using Airbyte 1.6.0 or higher, please see the migration guide: https://docs.dagster.io/integrations/libraries/airbyte/migration-guide"
915
+ )
916
+ )
897
917
  def load_assets_from_airbyte_instance(
898
918
  airbyte: Union[AirbyteResource, ResourceDefinition],
899
919
  workspace_id: Optional[str] = None,
@@ -910,7 +930,7 @@ def load_assets_from_airbyte_instance(
910
930
  Callable[[AirbyteConnectionMetadata, str], AssetKey]
911
931
  ] = None,
912
932
  connection_to_freshness_policy_fn: Optional[
913
- Callable[[AirbyteConnectionMetadata], Optional[FreshnessPolicy]]
933
+ Callable[[AirbyteConnectionMetadata], Optional[LegacyFreshnessPolicy]]
914
934
  ] = None,
915
935
  connection_to_auto_materialize_policy_fn: Optional[
916
936
  Callable[[AirbyteConnectionMetadata], Optional[AutoMaterializePolicy]]
@@ -1033,16 +1053,19 @@ def load_assets_from_airbyte_instance(
1033
1053
  @beta
1034
1054
  def build_airbyte_assets_definitions(
1035
1055
  *,
1036
- workspace: AirbyteCloudWorkspace,
1056
+ workspace: Union[AirbyteWorkspace, AirbyteCloudWorkspace],
1037
1057
  dagster_airbyte_translator: Optional[DagsterAirbyteTranslator] = None,
1058
+ connection_selector_fn: Optional[Callable[[AirbyteConnection], bool]] = None,
1038
1059
  ) -> Sequence[AssetsDefinition]:
1039
1060
  """The list of AssetsDefinition for all connections in the Airbyte workspace.
1040
1061
 
1041
1062
  Args:
1042
- workspace (AirbyteCloudWorkspace): The Airbyte workspace to fetch assets from.
1063
+ workspace (Union[AirbyteWorkspace, AirbyteCloudWorkspace]): The Airbyte workspace to fetch assets from.
1043
1064
  dagster_airbyte_translator (Optional[DagsterAirbyteTranslator], optional): The translator to use
1044
1065
  to convert Airbyte content into :py:class:`dagster.AssetSpec`.
1045
1066
  Defaults to :py:class:`DagsterAirbyteTranslator`.
1067
+ connection_selector_fn (Optional[Callable[[AirbyteConnection], bool]]): A function that allows for filtering
1068
+ which Airbyte connection assets are created for.
1046
1069
 
1047
1070
  Returns:
1048
1071
  List[AssetsDefinition]: The list of AssetsDefinition for all connections in the Airbyte workspace.
@@ -1062,7 +1085,6 @@ def build_airbyte_assets_definitions(
1062
1085
  client_secret=dg.EnvVar("AIRBYTE_CLOUD_CLIENT_SECRET"),
1063
1086
  )
1064
1087
 
1065
-
1066
1088
  airbyte_assets = build_airbyte_assets_definitions(workspace=workspace)
1067
1089
 
1068
1090
  defs = dg.Definitions(
@@ -1096,21 +1118,46 @@ def build_airbyte_assets_definitions(
1096
1118
  client_secret=dg.EnvVar("AIRBYTE_CLOUD_CLIENT_SECRET"),
1097
1119
  )
1098
1120
 
1099
-
1100
1121
  airbyte_assets = build_airbyte_assets_definitions(
1101
1122
  workspace=workspace,
1102
1123
  dagster_airbyte_translator=CustomDagsterAirbyteTranslator()
1103
1124
  )
1104
1125
 
1126
+ defs = dg.Definitions(
1127
+ assets=airbyte_assets,
1128
+ resources={"airbyte": airbyte_workspace},
1129
+ )
1130
+
1131
+ Filter connections by name:
1132
+
1133
+ .. code-block:: python
1134
+
1135
+ from dagster_airbyte import AirbyteCloudWorkspace, build_airbyte_assets_definitions
1136
+
1137
+ import dagster as dg
1138
+
1139
+ airbyte_workspace = AirbyteCloudWorkspace(
1140
+ workspace_id=dg.EnvVar("AIRBYTE_CLOUD_WORKSPACE_ID"),
1141
+ client_id=dg.EnvVar("AIRBYTE_CLOUD_CLIENT_ID"),
1142
+ client_secret=dg.EnvVar("AIRBYTE_CLOUD_CLIENT_SECRET"),
1143
+ )
1144
+
1145
+ airbyte_assets = build_airbyte_assets_definitions(
1146
+ workspace=workspace,
1147
+ connection_selector_fn=lambda connection: connection.name in ["connection1", "connection2"]
1148
+ )
1149
+
1105
1150
  defs = dg.Definitions(
1106
1151
  assets=airbyte_assets,
1107
1152
  resources={"airbyte": airbyte_workspace},
1108
1153
  )
1109
1154
  """
1110
1155
  dagster_airbyte_translator = dagster_airbyte_translator or DagsterAirbyteTranslator()
1156
+ connection_selector_fn = connection_selector_fn or (lambda connection: True)
1111
1157
 
1112
1158
  all_asset_specs = workspace.load_asset_specs(
1113
- dagster_airbyte_translator=dagster_airbyte_translator
1159
+ dagster_airbyte_translator=dagster_airbyte_translator,
1160
+ connection_selector_fn=connection_selector_fn,
1114
1161
  )
1115
1162
 
1116
1163
  connections = {
@@ -1127,10 +1174,10 @@ def build_airbyte_assets_definitions(
1127
1174
  @airbyte_assets(
1128
1175
  connection_id=connection_id,
1129
1176
  workspace=workspace,
1130
- name=clean_name(connection_name),
1177
+ name=f"airbyte_{clean_name(connection_name)}",
1131
1178
  dagster_airbyte_translator=dagster_airbyte_translator,
1132
1179
  )
1133
- def _asset_fn(context: AssetExecutionContext, airbyte: AirbyteCloudWorkspace):
1180
+ def _asset_fn(context: AssetExecutionContext, airbyte: BaseAirbyteWorkspace):
1134
1181
  yield from airbyte.sync_and_poll(context=context)
1135
1182
 
1136
1183
  _asset_fns.append(_asset_fn)
File without changes