dagster-airbyte 0.27.14__tar.gz → 0.27.16__tar.gz
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.
Potentially problematic release.
This version of dagster-airbyte might be problematic. Click here for more details.
- {dagster_airbyte-0.27.14/dagster_airbyte.egg-info → dagster_airbyte-0.27.16}/PKG-INFO +3 -3
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte/components/workspace_component/component.py +60 -27
- dagster_airbyte-0.27.16/dagster_airbyte/version.py +1 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16/dagster_airbyte.egg-info}/PKG-INFO +3 -3
- dagster_airbyte-0.27.16/dagster_airbyte.egg-info/requires.txt +9 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/setup.py +2 -2
- dagster_airbyte-0.27.14/dagster_airbyte/version.py +0 -1
- dagster_airbyte-0.27.14/dagster_airbyte.egg-info/requires.txt +0 -9
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/LICENSE +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/MANIFEST.in +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/README.md +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte/__init__.py +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte/asset_decorator.py +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte/asset_defs.py +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte/cli.py +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte/components/__init__.py +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte/components/workspace_component/__init__.py +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte/components/workspace_component/scaffolder.py +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte/managed/__init__.py +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte/managed/generated/__init__.py +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte/managed/generated/destinations.py +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte/managed/generated/sources.py +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte/managed/reconciliation.py +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte/managed/types.py +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte/ops.py +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte/py.typed +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte/resources.py +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte/translator.py +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte/types.py +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte/utils.py +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte.egg-info/SOURCES.txt +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte.egg-info/dependency_links.txt +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte.egg-info/entry_points.txt +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte.egg-info/not-zip-safe +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte.egg-info/top_level.txt +0 -0
- {dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dagster-airbyte
|
|
3
|
-
Version: 0.27.
|
|
3
|
+
Version: 0.27.16
|
|
4
4
|
Summary: Package for integrating Airbyte with Dagster.
|
|
5
5
|
Home-page: https://github.com/dagster-io/dagster/tree/master/python_modules/libraries/dagster-airbyte
|
|
6
6
|
Author: Dagster Labs
|
|
@@ -15,13 +15,13 @@ Classifier: License :: OSI Approved :: Apache Software License
|
|
|
15
15
|
Classifier: Operating System :: OS Independent
|
|
16
16
|
Requires-Python: >=3.9,<3.14
|
|
17
17
|
License-File: LICENSE
|
|
18
|
-
Requires-Dist: dagster==1.11.
|
|
18
|
+
Requires-Dist: dagster==1.11.16
|
|
19
19
|
Requires-Dist: requests
|
|
20
20
|
Provides-Extra: test
|
|
21
21
|
Requires-Dist: requests-mock; extra == "test"
|
|
22
22
|
Requires-Dist: flaky; extra == "test"
|
|
23
23
|
Provides-Extra: managed
|
|
24
|
-
Requires-Dist: dagster-managed-elements==0.27.
|
|
24
|
+
Requires-Dist: dagster-managed-elements==0.27.16; extra == "managed"
|
|
25
25
|
Dynamic: author
|
|
26
26
|
Dynamic: author-email
|
|
27
27
|
Dynamic: classifier
|
|
@@ -1,12 +1,20 @@
|
|
|
1
|
+
from collections import defaultdict
|
|
1
2
|
from collections.abc import Iterable, Sequence
|
|
2
3
|
from functools import cached_property
|
|
4
|
+
from pathlib import Path
|
|
3
5
|
from typing import Annotated, Callable, Optional, Union
|
|
4
6
|
|
|
5
7
|
import dagster as dg
|
|
6
8
|
import pydantic
|
|
7
9
|
from dagster._annotations import superseded
|
|
8
10
|
from dagster._utils.names import clean_name
|
|
11
|
+
from dagster.components.component.state_backed_component import StateBackedComponent
|
|
9
12
|
from dagster.components.resolved.base import resolve_fields
|
|
13
|
+
from dagster.components.utils.defs_state import (
|
|
14
|
+
DefsStateConfig,
|
|
15
|
+
DefsStateConfigArgs,
|
|
16
|
+
ResolvedDefsStateConfig,
|
|
17
|
+
)
|
|
10
18
|
from dagster.components.utils.translation import (
|
|
11
19
|
ComponentTranslator,
|
|
12
20
|
TranslationFn,
|
|
@@ -14,8 +22,8 @@ from dagster.components.utils.translation import (
|
|
|
14
22
|
create_component_translator_cls,
|
|
15
23
|
)
|
|
16
24
|
from dagster_shared import check
|
|
25
|
+
from dagster_shared.serdes.serdes import deserialize_value
|
|
17
26
|
|
|
18
|
-
from dagster_airbyte.asset_decorator import airbyte_assets
|
|
19
27
|
from dagster_airbyte.components.workspace_component.scaffolder import (
|
|
20
28
|
AirbyteWorkspaceComponentScaffolder,
|
|
21
29
|
)
|
|
@@ -24,8 +32,10 @@ from dagster_airbyte.translator import (
|
|
|
24
32
|
AirbyteConnection,
|
|
25
33
|
AirbyteConnectionTableProps,
|
|
26
34
|
AirbyteMetadataSet,
|
|
35
|
+
AirbyteWorkspaceData,
|
|
27
36
|
DagsterAirbyteTranslator,
|
|
28
37
|
)
|
|
38
|
+
from dagster_airbyte.utils import DAGSTER_AIRBYTE_TRANSLATOR_METADATA_KEY
|
|
29
39
|
|
|
30
40
|
|
|
31
41
|
class BaseAirbyteWorkspaceModel(dg.Model, dg.Resolvable):
|
|
@@ -163,7 +173,7 @@ def resolve_airbyte_workspace_type(context: dg.ResolutionContext, model):
|
|
|
163
173
|
|
|
164
174
|
|
|
165
175
|
@dg.scaffold_with(AirbyteWorkspaceComponentScaffolder)
|
|
166
|
-
class AirbyteWorkspaceComponent(
|
|
176
|
+
class AirbyteWorkspaceComponent(StateBackedComponent, dg.Model, dg.Resolvable):
|
|
167
177
|
"""Loads Airbyte connections from a given Airbyte workspace as Dagster assets.
|
|
168
178
|
Materializing these assets will trigger a sync of the Airbyte connection, enabling
|
|
169
179
|
you to schedule Airbyte syncs using Dagster.
|
|
@@ -195,6 +205,12 @@ class AirbyteWorkspaceComponent(dg.Component, dg.Model, dg.Resolvable):
|
|
|
195
205
|
default=None,
|
|
196
206
|
description="Function used to translate Airbyte connection table properties into Dagster asset specs.",
|
|
197
207
|
)
|
|
208
|
+
defs_state: ResolvedDefsStateConfig = DefsStateConfigArgs.legacy_code_server_snapshots()
|
|
209
|
+
|
|
210
|
+
@property
|
|
211
|
+
def defs_state_config(self) -> DefsStateConfig:
|
|
212
|
+
default_key = f"{self.__class__.__name__}[{self.workspace.workspace_id}]"
|
|
213
|
+
return DefsStateConfig.from_args(self.defs_state, default_key=default_key)
|
|
198
214
|
|
|
199
215
|
@cached_property
|
|
200
216
|
def translator(self) -> DagsterAirbyteTranslator:
|
|
@@ -212,36 +228,53 @@ class AirbyteWorkspaceComponent(dg.Component, dg.Model, dg.Resolvable):
|
|
|
212
228
|
) -> Iterable[Union[dg.AssetMaterialization, dg.MaterializeResult]]:
|
|
213
229
|
yield from airbyte.sync_and_poll(context=context)
|
|
214
230
|
|
|
215
|
-
def
|
|
231
|
+
def _load_asset_specs(self, state: AirbyteWorkspaceData) -> Sequence[dg.AssetSpec]:
|
|
216
232
|
connection_selector_fn = self.connection_selector or (lambda connection: True)
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
connection_selector_fn=connection_selector_fn,
|
|
221
|
-
)
|
|
222
|
-
|
|
223
|
-
connections = {
|
|
224
|
-
(
|
|
225
|
-
check.not_none(AirbyteMetadataSet.extract(spec.metadata).connection_id),
|
|
226
|
-
check.not_none(AirbyteMetadataSet.extract(spec.metadata).connection_name),
|
|
233
|
+
return [
|
|
234
|
+
self.translator.get_asset_spec(props).merge_attributes(
|
|
235
|
+
metadata={DAGSTER_AIRBYTE_TRANSLATOR_METADATA_KEY: self.translator}
|
|
227
236
|
)
|
|
228
|
-
for
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
assets = []
|
|
232
|
-
for connection_id, connection_name in connections:
|
|
237
|
+
for props in state.to_airbyte_connection_table_props_data()
|
|
238
|
+
if connection_selector_fn(state.connections_by_id[props.connection_id])
|
|
239
|
+
]
|
|
233
240
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
241
|
+
def _get_airbyte_assets_def(
|
|
242
|
+
self, connection_name: str, specs: Sequence[dg.AssetSpec]
|
|
243
|
+
) -> dg.AssetsDefinition:
|
|
244
|
+
@dg.multi_asset(
|
|
245
|
+
name=f"airbyte_{clean_name(connection_name)}",
|
|
246
|
+
can_subset=True,
|
|
247
|
+
specs=specs,
|
|
248
|
+
)
|
|
249
|
+
def _asset(context: dg.AssetExecutionContext):
|
|
250
|
+
yield from self.execute(context=context, airbyte=self.workspace)
|
|
251
|
+
|
|
252
|
+
return _asset
|
|
253
|
+
|
|
254
|
+
async def write_state_to_path(self, state_path: Path) -> None:
|
|
255
|
+
state = self.workspace.fetch_airbyte_workspace_data()
|
|
256
|
+
state_path.write_text(dg.serialize_value(state))
|
|
257
|
+
|
|
258
|
+
def build_defs_from_state(
|
|
259
|
+
self, context: dg.ComponentLoadContext, state_path: Optional[Path]
|
|
260
|
+
) -> dg.Definitions:
|
|
261
|
+
if state_path is None:
|
|
262
|
+
return dg.Definitions()
|
|
263
|
+
state = deserialize_value(state_path.read_text(), AirbyteWorkspaceData)
|
|
264
|
+
|
|
265
|
+
# group specs by their connector names
|
|
266
|
+
specs_by_connection_name = defaultdict(list)
|
|
267
|
+
for spec in self._load_asset_specs(state):
|
|
268
|
+
connection_name = check.not_none(
|
|
269
|
+
AirbyteMetadataSet.extract(spec.metadata).connection_name
|
|
239
270
|
)
|
|
240
|
-
|
|
241
|
-
yield from self.execute(context=context, airbyte=self.workspace)
|
|
242
|
-
|
|
243
|
-
assets.append(_asset_fn)
|
|
271
|
+
specs_by_connection_name[connection_name].append(spec)
|
|
244
272
|
|
|
273
|
+
# create one assets definition per connection
|
|
274
|
+
assets = [
|
|
275
|
+
self._get_airbyte_assets_def(connection_name, specs)
|
|
276
|
+
for connection_name, specs in specs_by_connection_name.items()
|
|
277
|
+
]
|
|
245
278
|
return dg.Definitions(assets=assets)
|
|
246
279
|
|
|
247
280
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.27.16"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dagster-airbyte
|
|
3
|
-
Version: 0.27.
|
|
3
|
+
Version: 0.27.16
|
|
4
4
|
Summary: Package for integrating Airbyte with Dagster.
|
|
5
5
|
Home-page: https://github.com/dagster-io/dagster/tree/master/python_modules/libraries/dagster-airbyte
|
|
6
6
|
Author: Dagster Labs
|
|
@@ -15,13 +15,13 @@ Classifier: License :: OSI Approved :: Apache Software License
|
|
|
15
15
|
Classifier: Operating System :: OS Independent
|
|
16
16
|
Requires-Python: >=3.9,<3.14
|
|
17
17
|
License-File: LICENSE
|
|
18
|
-
Requires-Dist: dagster==1.11.
|
|
18
|
+
Requires-Dist: dagster==1.11.16
|
|
19
19
|
Requires-Dist: requests
|
|
20
20
|
Provides-Extra: test
|
|
21
21
|
Requires-Dist: requests-mock; extra == "test"
|
|
22
22
|
Requires-Dist: flaky; extra == "test"
|
|
23
23
|
Provides-Extra: managed
|
|
24
|
-
Requires-Dist: dagster-managed-elements==0.27.
|
|
24
|
+
Requires-Dist: dagster-managed-elements==0.27.16; extra == "managed"
|
|
25
25
|
Dynamic: author
|
|
26
26
|
Dynamic: author-email
|
|
27
27
|
Dynamic: classifier
|
|
@@ -37,7 +37,7 @@ setup(
|
|
|
37
37
|
include_package_data=True,
|
|
38
38
|
python_requires=">=3.9,<3.14",
|
|
39
39
|
install_requires=[
|
|
40
|
-
"dagster==1.11.
|
|
40
|
+
"dagster==1.11.16",
|
|
41
41
|
"requests",
|
|
42
42
|
],
|
|
43
43
|
zip_safe=False,
|
|
@@ -55,7 +55,7 @@ setup(
|
|
|
55
55
|
"flaky",
|
|
56
56
|
],
|
|
57
57
|
"managed": [
|
|
58
|
-
"dagster-managed-elements==0.27.
|
|
58
|
+
"dagster-managed-elements==0.27.16",
|
|
59
59
|
],
|
|
60
60
|
},
|
|
61
61
|
)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.27.14"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte/managed/generated/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte/managed/generated/sources.py
RENAMED
|
File without changes
|
{dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte/managed/reconciliation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{dagster_airbyte-0.27.14 → dagster_airbyte-0.27.16}/dagster_airbyte.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|