dagster-airbyte 0.26.19__tar.gz → 0.26.20__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.26.19/dagster_airbyte.egg-info → dagster_airbyte-0.26.20}/PKG-INFO +3 -3
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/__init__.py +4 -0
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/asset_defs.py +1 -1
- dagster_airbyte-0.26.20/dagster_airbyte/components/__init__.py +0 -0
- dagster_airbyte-0.26.20/dagster_airbyte/components/workspace_component/__init__.py +0 -0
- dagster_airbyte-0.26.20/dagster_airbyte/components/workspace_component/component.py +155 -0
- dagster_airbyte-0.26.20/dagster_airbyte/components/workspace_component/scaffolder.py +30 -0
- dagster_airbyte-0.26.20/dagster_airbyte/version.py +1 -0
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20/dagster_airbyte.egg-info}/PKG-INFO +3 -3
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte.egg-info/SOURCES.txt +4 -0
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte.egg-info/entry_points.txt +3 -0
- dagster_airbyte-0.26.20/dagster_airbyte.egg-info/requires.txt +9 -0
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/setup.py +6 -3
- dagster_airbyte-0.26.19/dagster_airbyte/version.py +0 -1
- dagster_airbyte-0.26.19/dagster_airbyte.egg-info/requires.txt +0 -9
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/LICENSE +0 -0
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/MANIFEST.in +0 -0
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/README.md +0 -0
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/asset_decorator.py +0 -0
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/cli.py +0 -0
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/managed/__init__.py +0 -0
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/managed/generated/__init__.py +0 -0
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/managed/generated/destinations.py +0 -0
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/managed/generated/sources.py +0 -0
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/managed/reconciliation.py +0 -0
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/managed/types.py +0 -0
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/ops.py +0 -0
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/py.typed +0 -0
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/resources.py +0 -0
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/translator.py +0 -0
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/types.py +0 -0
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/utils.py +0 -0
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte.egg-info/dependency_links.txt +0 -0
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte.egg-info/not-zip-safe +0 -0
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte.egg-info/top_level.txt +0 -0
- {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dagster-airbyte
|
|
3
|
-
Version: 0.26.
|
|
3
|
+
Version: 0.26.20
|
|
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
|
|
@@ -14,13 +14,13 @@ Classifier: License :: OSI Approved :: Apache Software License
|
|
|
14
14
|
Classifier: Operating System :: OS Independent
|
|
15
15
|
Requires-Python: >=3.9,<3.13
|
|
16
16
|
License-File: LICENSE
|
|
17
|
-
Requires-Dist: dagster==1.10.
|
|
17
|
+
Requires-Dist: dagster==1.10.20
|
|
18
18
|
Requires-Dist: requests
|
|
19
19
|
Provides-Extra: test
|
|
20
20
|
Requires-Dist: requests-mock; extra == "test"
|
|
21
21
|
Requires-Dist: flaky; extra == "test"
|
|
22
22
|
Provides-Extra: managed
|
|
23
|
-
Requires-Dist: dagster-managed-elements==0.26.
|
|
23
|
+
Requires-Dist: dagster-managed-elements==0.26.20; extra == "managed"
|
|
24
24
|
Dynamic: author
|
|
25
25
|
Dynamic: author-email
|
|
26
26
|
Dynamic: classifier
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
from dagster_shared.libraries import DagsterLibraryRegistry
|
|
2
2
|
|
|
3
|
+
from dagster_airbyte.components.workspace_component.component import (
|
|
4
|
+
AirbyteCloudWorkspaceComponent as AirbyteCloudWorkspaceComponent,
|
|
5
|
+
)
|
|
6
|
+
|
|
3
7
|
try:
|
|
4
8
|
from dagster_airbyte.managed import (
|
|
5
9
|
AirbyteConnection as AirbyteConnection,
|
|
@@ -1158,7 +1158,7 @@ def build_airbyte_assets_definitions(
|
|
|
1158
1158
|
@airbyte_assets(
|
|
1159
1159
|
connection_id=connection_id,
|
|
1160
1160
|
workspace=workspace,
|
|
1161
|
-
name=clean_name(connection_name),
|
|
1161
|
+
name=f"airbyte_{clean_name(connection_name)}",
|
|
1162
1162
|
dagster_airbyte_translator=dagster_airbyte_translator,
|
|
1163
1163
|
)
|
|
1164
1164
|
def _asset_fn(context: AssetExecutionContext, airbyte: AirbyteCloudWorkspace):
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
from collections.abc import Sequence
|
|
2
|
+
from functools import cached_property
|
|
3
|
+
from typing import Annotated, Callable, Optional, Union
|
|
4
|
+
|
|
5
|
+
import dagster as dg
|
|
6
|
+
import pydantic
|
|
7
|
+
from dagster._core.definitions.job_definition import default_job_io_manager
|
|
8
|
+
from dagster.components.resolved.base import resolve_fields
|
|
9
|
+
from dagster.components.utils import TranslatorResolvingInfo
|
|
10
|
+
from dagster_shared import check
|
|
11
|
+
from typing_extensions import TypeAlias
|
|
12
|
+
|
|
13
|
+
from dagster_airbyte.asset_defs import build_airbyte_assets_definitions
|
|
14
|
+
from dagster_airbyte.components.workspace_component.scaffolder import (
|
|
15
|
+
AirbyteCloudWorkspaceComponentScaffolder,
|
|
16
|
+
)
|
|
17
|
+
from dagster_airbyte.resources import AirbyteCloudWorkspace
|
|
18
|
+
from dagster_airbyte.translator import (
|
|
19
|
+
AirbyteConnection,
|
|
20
|
+
AirbyteConnectionTableProps,
|
|
21
|
+
DagsterAirbyteTranslator,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def resolve_translation(context: dg.ResolutionContext, model):
|
|
26
|
+
info = TranslatorResolvingInfo(
|
|
27
|
+
"props",
|
|
28
|
+
asset_attributes=model,
|
|
29
|
+
resolution_context=context,
|
|
30
|
+
model_key="translation",
|
|
31
|
+
)
|
|
32
|
+
return lambda base_asset_spec, props: info.get_asset_spec(
|
|
33
|
+
base_asset_spec,
|
|
34
|
+
{
|
|
35
|
+
"props": props,
|
|
36
|
+
"spec": base_asset_spec,
|
|
37
|
+
},
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
TranslationFn: TypeAlias = Callable[[dg.AssetSpec, AirbyteConnectionTableProps], dg.AssetSpec]
|
|
42
|
+
ResolvedTranslationFn: TypeAlias = Annotated[
|
|
43
|
+
TranslationFn,
|
|
44
|
+
dg.Resolver(
|
|
45
|
+
resolve_translation,
|
|
46
|
+
model_field_type=Union[str, dg.AssetAttributesModel],
|
|
47
|
+
),
|
|
48
|
+
]
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class ProxyDagsterAirbyteTranslator(DagsterAirbyteTranslator):
|
|
52
|
+
def __init__(self, fn: TranslationFn):
|
|
53
|
+
self.fn = fn
|
|
54
|
+
|
|
55
|
+
def get_asset_spec(self, props: AirbyteConnectionTableProps) -> dg.AssetSpec:
|
|
56
|
+
base_asset_spec = super().get_asset_spec(props)
|
|
57
|
+
spec = self.fn(base_asset_spec, props)
|
|
58
|
+
|
|
59
|
+
return spec
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class AirbyteCloudWorkspaceModel(dg.Model):
|
|
63
|
+
workspace_id: Annotated[str, pydantic.Field(..., description="The Airbyte Cloud workspace ID.")]
|
|
64
|
+
client_id: Annotated[
|
|
65
|
+
str, pydantic.Field(..., description="Client ID used to authenticate to Airbyte Cloud.")
|
|
66
|
+
]
|
|
67
|
+
client_secret: Annotated[
|
|
68
|
+
str, pydantic.Field(..., description="Client secret used to authenticate to Airbyte Cloud.")
|
|
69
|
+
]
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class AirbyteConnectionSelectorByName(dg.Model):
|
|
73
|
+
by_name: Annotated[
|
|
74
|
+
Sequence[str],
|
|
75
|
+
pydantic.Field(..., description="A list of connection names to include in the collection."),
|
|
76
|
+
]
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
class AirbyteConnectionSelectorById(dg.Model):
|
|
80
|
+
by_id: Annotated[
|
|
81
|
+
Sequence[str],
|
|
82
|
+
pydantic.Field(..., description="A list of connection IDs to include in the collection."),
|
|
83
|
+
]
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def resolve_connection_selector(
|
|
87
|
+
context: dg.ResolutionContext, model
|
|
88
|
+
) -> Optional[Callable[[AirbyteConnection], bool]]:
|
|
89
|
+
if isinstance(model, str):
|
|
90
|
+
model = context.resolve_value(model)
|
|
91
|
+
|
|
92
|
+
if isinstance(model, AirbyteConnectionSelectorByName):
|
|
93
|
+
return lambda connection: connection.name in model.by_name
|
|
94
|
+
elif isinstance(model, AirbyteConnectionSelectorById):
|
|
95
|
+
return lambda connection: connection.id in model.by_id
|
|
96
|
+
else:
|
|
97
|
+
check.failed(f"Unknown connection target type: {type(model)}")
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
@dg.scaffold_with(AirbyteCloudWorkspaceComponentScaffolder)
|
|
101
|
+
class AirbyteCloudWorkspaceComponent(dg.Component, dg.Model, dg.Resolvable):
|
|
102
|
+
"""Loads Airbyte Cloud connections from a given Airbyte Cloud workspace as Dagster assets.
|
|
103
|
+
Materializing these assets will trigger a sync of the Airbyte Cloud connection, enabling
|
|
104
|
+
you to schedule Airbyte Cloud syncs using Dagster.
|
|
105
|
+
"""
|
|
106
|
+
|
|
107
|
+
workspace: Annotated[
|
|
108
|
+
AirbyteCloudWorkspace,
|
|
109
|
+
dg.Resolver(
|
|
110
|
+
lambda context, model: AirbyteCloudWorkspace(
|
|
111
|
+
**resolve_fields(model, AirbyteCloudWorkspace, context) # type: ignore
|
|
112
|
+
)
|
|
113
|
+
),
|
|
114
|
+
]
|
|
115
|
+
connection_selector: Annotated[
|
|
116
|
+
Optional[Callable[[AirbyteConnection], bool]],
|
|
117
|
+
dg.Resolver(
|
|
118
|
+
resolve_connection_selector,
|
|
119
|
+
model_field_type=Union[
|
|
120
|
+
str, AirbyteConnectionSelectorByName, AirbyteConnectionSelectorById
|
|
121
|
+
],
|
|
122
|
+
description="Function used to select Airbyte Cloud connections to pull into Dagster.",
|
|
123
|
+
),
|
|
124
|
+
] = None
|
|
125
|
+
translation: Optional[ResolvedTranslationFn] = pydantic.Field(
|
|
126
|
+
None,
|
|
127
|
+
description="Function used to translate Airbyte Cloud connection table properties into Dagster asset specs.",
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
@cached_property
|
|
131
|
+
def workspace_resource(self) -> AirbyteCloudWorkspace:
|
|
132
|
+
return self.workspace
|
|
133
|
+
|
|
134
|
+
@cached_property
|
|
135
|
+
def translator(self) -> DagsterAirbyteTranslator:
|
|
136
|
+
if self.translation:
|
|
137
|
+
return ProxyDagsterAirbyteTranslator(self.translation)
|
|
138
|
+
return DagsterAirbyteTranslator()
|
|
139
|
+
|
|
140
|
+
def build_defs(self, context: dg.ComponentLoadContext) -> dg.Definitions:
|
|
141
|
+
airbyte_assets = build_airbyte_assets_definitions(
|
|
142
|
+
workspace=self.workspace_resource,
|
|
143
|
+
dagster_airbyte_translator=self.translator,
|
|
144
|
+
connection_selector_fn=self.connection_selector,
|
|
145
|
+
)
|
|
146
|
+
assets_with_resource = [
|
|
147
|
+
airbyte_asset.with_resources(
|
|
148
|
+
{
|
|
149
|
+
"airbyte": self.workspace_resource.get_resource_definition(),
|
|
150
|
+
"io_manager": default_job_io_manager,
|
|
151
|
+
}
|
|
152
|
+
)
|
|
153
|
+
for airbyte_asset in airbyte_assets
|
|
154
|
+
]
|
|
155
|
+
return dg.Definitions(assets=assets_with_resource)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from dagster.components.component.component_scaffolder import Scaffolder
|
|
4
|
+
from dagster.components.component_scaffolding import scaffold_component
|
|
5
|
+
from dagster.components.scaffold.scaffold import ScaffoldRequest
|
|
6
|
+
from pydantic import BaseModel
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class AirbyteScaffolderParams(BaseModel):
|
|
10
|
+
workspace_id: Optional[str] = None
|
|
11
|
+
client_id: Optional[str] = None
|
|
12
|
+
client_secret: Optional[str] = None
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class AirbyteCloudWorkspaceComponentScaffolder(Scaffolder[AirbyteScaffolderParams]):
|
|
16
|
+
@classmethod
|
|
17
|
+
def get_scaffold_params(cls) -> type[AirbyteScaffolderParams]:
|
|
18
|
+
return AirbyteScaffolderParams
|
|
19
|
+
|
|
20
|
+
def scaffold(self, request: ScaffoldRequest[AirbyteScaffolderParams]) -> None:
|
|
21
|
+
scaffold_component(
|
|
22
|
+
request,
|
|
23
|
+
{
|
|
24
|
+
"workspace": {
|
|
25
|
+
"workspace_id": request.params.workspace_id,
|
|
26
|
+
"client_id": request.params.client_id,
|
|
27
|
+
"client_secret": request.params.client_secret,
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.26.20"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dagster-airbyte
|
|
3
|
-
Version: 0.26.
|
|
3
|
+
Version: 0.26.20
|
|
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
|
|
@@ -14,13 +14,13 @@ Classifier: License :: OSI Approved :: Apache Software License
|
|
|
14
14
|
Classifier: Operating System :: OS Independent
|
|
15
15
|
Requires-Python: >=3.9,<3.13
|
|
16
16
|
License-File: LICENSE
|
|
17
|
-
Requires-Dist: dagster==1.10.
|
|
17
|
+
Requires-Dist: dagster==1.10.20
|
|
18
18
|
Requires-Dist: requests
|
|
19
19
|
Provides-Extra: test
|
|
20
20
|
Requires-Dist: requests-mock; extra == "test"
|
|
21
21
|
Requires-Dist: flaky; extra == "test"
|
|
22
22
|
Provides-Extra: managed
|
|
23
|
-
Requires-Dist: dagster-managed-elements==0.26.
|
|
23
|
+
Requires-Dist: dagster-managed-elements==0.26.20; extra == "managed"
|
|
24
24
|
Dynamic: author
|
|
25
25
|
Dynamic: author-email
|
|
26
26
|
Dynamic: classifier
|
|
@@ -21,6 +21,10 @@ dagster_airbyte.egg-info/entry_points.txt
|
|
|
21
21
|
dagster_airbyte.egg-info/not-zip-safe
|
|
22
22
|
dagster_airbyte.egg-info/requires.txt
|
|
23
23
|
dagster_airbyte.egg-info/top_level.txt
|
|
24
|
+
dagster_airbyte/components/__init__.py
|
|
25
|
+
dagster_airbyte/components/workspace_component/__init__.py
|
|
26
|
+
dagster_airbyte/components/workspace_component/component.py
|
|
27
|
+
dagster_airbyte/components/workspace_component/scaffolder.py
|
|
24
28
|
dagster_airbyte/managed/__init__.py
|
|
25
29
|
dagster_airbyte/managed/reconciliation.py
|
|
26
30
|
dagster_airbyte/managed/types.py
|
|
@@ -36,14 +36,17 @@ setup(
|
|
|
36
36
|
include_package_data=True,
|
|
37
37
|
python_requires=">=3.9,<3.13",
|
|
38
38
|
install_requires=[
|
|
39
|
-
"dagster==1.10.
|
|
39
|
+
"dagster==1.10.20",
|
|
40
40
|
"requests",
|
|
41
41
|
],
|
|
42
42
|
zip_safe=False,
|
|
43
43
|
entry_points={
|
|
44
44
|
"console_scripts": [
|
|
45
45
|
"dagster-airbyte = dagster_airbyte.cli:main",
|
|
46
|
-
]
|
|
46
|
+
],
|
|
47
|
+
"dagster_dg_cli.plugin": [
|
|
48
|
+
"dagster_airbyte = dagster_airbyte",
|
|
49
|
+
],
|
|
47
50
|
},
|
|
48
51
|
extras_require={
|
|
49
52
|
"test": [
|
|
@@ -51,7 +54,7 @@ setup(
|
|
|
51
54
|
"flaky",
|
|
52
55
|
],
|
|
53
56
|
"managed": [
|
|
54
|
-
"dagster-managed-elements==0.26.
|
|
57
|
+
"dagster-managed-elements==0.26.20",
|
|
55
58
|
],
|
|
56
59
|
},
|
|
57
60
|
)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.26.19"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/managed/generated/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/managed/generated/sources.py
RENAMED
|
File without changes
|
{dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/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
|
{dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|