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.

Files changed (36) hide show
  1. {dagster_airbyte-0.26.19/dagster_airbyte.egg-info → dagster_airbyte-0.26.20}/PKG-INFO +3 -3
  2. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/__init__.py +4 -0
  3. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/asset_defs.py +1 -1
  4. dagster_airbyte-0.26.20/dagster_airbyte/components/__init__.py +0 -0
  5. dagster_airbyte-0.26.20/dagster_airbyte/components/workspace_component/__init__.py +0 -0
  6. dagster_airbyte-0.26.20/dagster_airbyte/components/workspace_component/component.py +155 -0
  7. dagster_airbyte-0.26.20/dagster_airbyte/components/workspace_component/scaffolder.py +30 -0
  8. dagster_airbyte-0.26.20/dagster_airbyte/version.py +1 -0
  9. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20/dagster_airbyte.egg-info}/PKG-INFO +3 -3
  10. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte.egg-info/SOURCES.txt +4 -0
  11. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte.egg-info/entry_points.txt +3 -0
  12. dagster_airbyte-0.26.20/dagster_airbyte.egg-info/requires.txt +9 -0
  13. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/setup.py +6 -3
  14. dagster_airbyte-0.26.19/dagster_airbyte/version.py +0 -1
  15. dagster_airbyte-0.26.19/dagster_airbyte.egg-info/requires.txt +0 -9
  16. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/LICENSE +0 -0
  17. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/MANIFEST.in +0 -0
  18. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/README.md +0 -0
  19. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/asset_decorator.py +0 -0
  20. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/cli.py +0 -0
  21. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/managed/__init__.py +0 -0
  22. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/managed/generated/__init__.py +0 -0
  23. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/managed/generated/destinations.py +0 -0
  24. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/managed/generated/sources.py +0 -0
  25. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/managed/reconciliation.py +0 -0
  26. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/managed/types.py +0 -0
  27. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/ops.py +0 -0
  28. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/py.typed +0 -0
  29. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/resources.py +0 -0
  30. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/translator.py +0 -0
  31. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/types.py +0 -0
  32. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte/utils.py +0 -0
  33. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte.egg-info/dependency_links.txt +0 -0
  34. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte.egg-info/not-zip-safe +0 -0
  35. {dagster_airbyte-0.26.19 → dagster_airbyte-0.26.20}/dagster_airbyte.egg-info/top_level.txt +0 -0
  36. {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.19
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.19
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.19; extra == "managed"
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):
@@ -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.19
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.19
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.19; extra == "managed"
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
@@ -1,2 +1,5 @@
1
1
  [console_scripts]
2
2
  dagster-airbyte = dagster_airbyte.cli:main
3
+
4
+ [dagster_dg_cli.plugin]
5
+ dagster_airbyte = dagster_airbyte
@@ -0,0 +1,9 @@
1
+ dagster==1.10.20
2
+ requests
3
+
4
+ [managed]
5
+ dagster-managed-elements==0.26.20
6
+
7
+ [test]
8
+ requests-mock
9
+ flaky
@@ -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.19",
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.19",
57
+ "dagster-managed-elements==0.26.20",
55
58
  ],
56
59
  },
57
60
  )
@@ -1 +0,0 @@
1
- __version__ = "0.26.19"
@@ -1,9 +0,0 @@
1
- dagster==1.10.19
2
- requests
3
-
4
- [managed]
5
- dagster-managed-elements==0.26.19
6
-
7
- [test]
8
- requests-mock
9
- flaky