dagster-fivetran 0.27.13__tar.gz → 0.27.14__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.
Files changed (35) hide show
  1. {dagster_fivetran-0.27.13/dagster_fivetran.egg-info → dagster_fivetran-0.27.14}/PKG-INFO +3 -3
  2. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/dagster_fivetran/components/workspace_component/component.py +65 -30
  3. dagster_fivetran-0.27.14/dagster_fivetran/version.py +1 -0
  4. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14/dagster_fivetran.egg-info}/PKG-INFO +3 -3
  5. dagster_fivetran-0.27.14/dagster_fivetran.egg-info/requires.txt +7 -0
  6. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/setup.py +2 -2
  7. dagster_fivetran-0.27.13/dagster_fivetran/version.py +0 -1
  8. dagster_fivetran-0.27.13/dagster_fivetran.egg-info/requires.txt +0 -7
  9. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/LICENSE +0 -0
  10. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/MANIFEST.in +0 -0
  11. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/README.md +0 -0
  12. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/dagster_fivetran/__init__.py +0 -0
  13. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/dagster_fivetran/asset_decorator.py +0 -0
  14. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/dagster_fivetran/asset_defs.py +0 -0
  15. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/dagster_fivetran/cli.py +0 -0
  16. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/dagster_fivetran/components/__init__.py +0 -0
  17. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/dagster_fivetran/components/workspace_component/__init__.py +0 -0
  18. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/dagster_fivetran/components/workspace_component/scaffolder.py +0 -0
  19. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/dagster_fivetran/constants.py +0 -0
  20. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/dagster_fivetran/fivetran_event_iterator.py +0 -0
  21. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/dagster_fivetran/managed/__init__.py +0 -0
  22. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/dagster_fivetran/managed/reconciliation.py +0 -0
  23. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/dagster_fivetran/managed/types.py +0 -0
  24. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/dagster_fivetran/ops.py +0 -0
  25. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/dagster_fivetran/py.typed +0 -0
  26. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/dagster_fivetran/resources.py +0 -0
  27. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/dagster_fivetran/translator.py +0 -0
  28. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/dagster_fivetran/types.py +0 -0
  29. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/dagster_fivetran/utils.py +0 -0
  30. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/dagster_fivetran.egg-info/SOURCES.txt +0 -0
  31. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/dagster_fivetran.egg-info/dependency_links.txt +0 -0
  32. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/dagster_fivetran.egg-info/entry_points.txt +0 -0
  33. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/dagster_fivetran.egg-info/not-zip-safe +0 -0
  34. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/dagster_fivetran.egg-info/top_level.txt +0 -0
  35. {dagster_fivetran-0.27.13 → dagster_fivetran-0.27.14}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dagster-fivetran
3
- Version: 0.27.13
3
+ Version: 0.27.14
4
4
  Summary: Package for integrating Fivetran with Dagster.
5
5
  Home-page: https://github.com/dagster-io/dagster/tree/master/python_modules/libraries/dagster-fivetran
6
6
  Author: Dagster Labs
@@ -15,9 +15,9 @@ 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.13
18
+ Requires-Dist: dagster==1.11.14
19
19
  Provides-Extra: managed
20
- Requires-Dist: dagster-managed-elements==0.27.13; extra == "managed"
20
+ Requires-Dist: dagster-managed-elements==0.27.14; extra == "managed"
21
21
  Provides-Extra: test
22
22
  Requires-Dist: pytest-order; extra == "test"
23
23
  Dynamic: author
@@ -1,16 +1,21 @@
1
- from collections.abc import Sequence
1
+ from collections.abc import Iterable, Sequence
2
2
  from functools import cached_property
3
3
  from typing import Annotated, Callable, Optional, Union
4
4
 
5
5
  import dagster as dg
6
6
  import pydantic
7
7
  from dagster._annotations import public
8
- from dagster._core.definitions.job_definition import default_job_io_manager
8
+ from dagster._utils.names import clean_name
9
9
  from dagster.components.resolved.base import resolve_fields
10
- from dagster.components.utils.translation import TranslationFn, TranslationFnResolver
10
+ from dagster.components.utils.translation import (
11
+ ComponentTranslator,
12
+ TranslationFn,
13
+ TranslationFnResolver,
14
+ create_component_translator_cls,
15
+ )
11
16
  from dagster_shared import check
12
17
 
13
- from dagster_fivetran.asset_defs import build_fivetran_assets_definitions
18
+ from dagster_fivetran.asset_decorator import fivetran_assets
14
19
  from dagster_fivetran.components.workspace_component.scaffolder import (
15
20
  FivetranAccountComponentScaffolder,
16
21
  )
@@ -19,20 +24,10 @@ from dagster_fivetran.translator import (
19
24
  DagsterFivetranTranslator,
20
25
  FivetranConnector,
21
26
  FivetranConnectorTableProps,
27
+ FivetranMetadataSet,
22
28
  )
23
29
 
24
30
 
25
- class ProxyDagsterFivetranTranslator(DagsterFivetranTranslator):
26
- def __init__(self, fn: TranslationFn[FivetranConnectorTableProps]):
27
- self.fn = fn
28
-
29
- def get_asset_spec(self, props: FivetranConnectorTableProps) -> dg.AssetSpec:
30
- base_asset_spec = super().get_asset_spec(props)
31
- spec = self.fn(base_asset_spec, props)
32
-
33
- return spec
34
-
35
-
36
31
  class FivetranWorkspaceModel(pydantic.BaseModel):
37
32
  account_id: str = pydantic.Field(..., description="The Fivetran account ID.")
38
33
  api_key: str = pydantic.Field(
@@ -102,7 +97,7 @@ class FivetranAccountComponent(dg.Component, dg.Model, dg.Resolvable):
102
97
  TranslationFnResolver(template_vars_for_translation_fn=lambda data: {"props": data}),
103
98
  ]
104
99
  ] = pydantic.Field(
105
- None,
100
+ default=None,
106
101
  description="Function used to translate Fivetran connector table properties into Dagster asset specs.",
107
102
  )
108
103
 
@@ -112,23 +107,63 @@ class FivetranAccountComponent(dg.Component, dg.Model, dg.Resolvable):
112
107
 
113
108
  @cached_property
114
109
  def translator(self) -> DagsterFivetranTranslator:
115
- if self.translation:
116
- return ProxyDagsterFivetranTranslator(self.translation)
110
+ return FivetranComponentTranslator(self)
111
+
112
+ @cached_property
113
+ def _base_translator(self) -> DagsterFivetranTranslator:
117
114
  return DagsterFivetranTranslator()
118
115
 
116
+ def get_asset_spec(self, props: FivetranConnectorTableProps) -> dg.AssetSpec:
117
+ return self._base_translator.get_asset_spec(props)
118
+
119
+ def execute(
120
+ self, context: dg.AssetExecutionContext, fivetran: FivetranWorkspace
121
+ ) -> Iterable[Union[dg.AssetMaterialization, dg.MaterializeResult]]:
122
+ yield from fivetran.sync_and_poll(context=context)
123
+
119
124
  def build_defs(self, context: dg.ComponentLoadContext) -> dg.Definitions:
120
- fivetran_assets = build_fivetran_assets_definitions(
121
- workspace=self.workspace_resource,
125
+ connector_selector_fn = self.connector_selector or (lambda connector: bool(connector))
126
+ all_asset_specs = self.workspace_resource.load_asset_specs(
122
127
  dagster_fivetran_translator=self.translator,
123
- connector_selector_fn=self.connector_selector,
128
+ connector_selector_fn=connector_selector_fn,
124
129
  )
125
- assets_with_resource = [
126
- fivetran_asset.with_resources(
127
- {
128
- "fivetran": self.workspace_resource.get_resource_definition(),
129
- "io_manager": default_job_io_manager,
130
- }
130
+
131
+ connectors = {
132
+ (
133
+ check.not_none(FivetranMetadataSet.extract(spec.metadata).connector_id),
134
+ check.not_none(FivetranMetadataSet.extract(spec.metadata).connector_name),
131
135
  )
132
- for fivetran_asset in fivetran_assets
133
- ]
134
- return dg.Definitions(assets=assets_with_resource)
136
+ for spec in all_asset_specs
137
+ }
138
+
139
+ assets = []
140
+ for connector_id, connector_name in connectors:
141
+
142
+ @fivetran_assets(
143
+ connector_id=connector_id,
144
+ workspace=self.workspace_resource,
145
+ name=f"fivetran_{clean_name(connector_name)}",
146
+ dagster_fivetran_translator=self.translator,
147
+ connector_selector_fn=connector_selector_fn,
148
+ )
149
+ def _asset(context: dg.AssetExecutionContext):
150
+ yield from self.execute(context=context, fivetran=self.workspace_resource)
151
+
152
+ assets.append(_asset)
153
+
154
+ return dg.Definitions(assets=assets)
155
+
156
+
157
+ class FivetranComponentTranslator(
158
+ create_component_translator_cls(FivetranAccountComponent, DagsterFivetranTranslator),
159
+ ComponentTranslator[FivetranAccountComponent],
160
+ ):
161
+ def __init__(self, component: "FivetranAccountComponent"):
162
+ self._component = component
163
+
164
+ def get_asset_spec(self, props: FivetranConnectorTableProps) -> dg.AssetSpec:
165
+ base_asset_spec = super().get_asset_spec(props)
166
+ if self.component.translation is None:
167
+ return base_asset_spec
168
+ else:
169
+ return self.component.translation(base_asset_spec, props)
@@ -0,0 +1 @@
1
+ __version__ = "0.27.14"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dagster-fivetran
3
- Version: 0.27.13
3
+ Version: 0.27.14
4
4
  Summary: Package for integrating Fivetran with Dagster.
5
5
  Home-page: https://github.com/dagster-io/dagster/tree/master/python_modules/libraries/dagster-fivetran
6
6
  Author: Dagster Labs
@@ -15,9 +15,9 @@ 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.13
18
+ Requires-Dist: dagster==1.11.14
19
19
  Provides-Extra: managed
20
- Requires-Dist: dagster-managed-elements==0.27.13; extra == "managed"
20
+ Requires-Dist: dagster-managed-elements==0.27.14; extra == "managed"
21
21
  Provides-Extra: test
22
22
  Requires-Dist: pytest-order; extra == "test"
23
23
  Dynamic: author
@@ -0,0 +1,7 @@
1
+ dagster==1.11.14
2
+
3
+ [managed]
4
+ dagster-managed-elements==0.27.14
5
+
6
+ [test]
7
+ pytest-order
@@ -34,7 +34,7 @@ setup(
34
34
  packages=find_packages(exclude=["dagster_fivetran_tests*"]),
35
35
  include_package_data=True,
36
36
  python_requires=">=3.9,<3.14",
37
- install_requires=["dagster==1.11.13"],
37
+ install_requires=["dagster==1.11.14"],
38
38
  zip_safe=False,
39
39
  entry_points={
40
40
  "console_scripts": [
@@ -46,7 +46,7 @@ setup(
46
46
  },
47
47
  extras_require={
48
48
  "managed": [
49
- "dagster-managed-elements==0.27.13",
49
+ "dagster-managed-elements==0.27.14",
50
50
  ],
51
51
  "test": [
52
52
  "pytest-order",
@@ -1 +0,0 @@
1
- __version__ = "0.27.13"
@@ -1,7 +0,0 @@
1
- dagster==1.11.13
2
-
3
- [managed]
4
- dagster-managed-elements==0.27.13
5
-
6
- [test]
7
- pytest-order