dagster-dbt 0.24.3__tar.gz → 0.28.8__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.
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/LICENSE +1 -1
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/MANIFEST.in +1 -0
- dagster_dbt-0.28.8/PKG-INFO +48 -0
- dagster_dbt-0.28.8/README.md +4 -0
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/__init__.py +38 -18
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/asset_decorator.py +36 -24
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/asset_specs.py +24 -31
- dagster_dbt-0.28.8/dagster_dbt/asset_utils.py +1222 -0
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/cli/app.py +34 -14
- dagster_dbt-0.28.8/dagster_dbt/cloud/__init__.py +10 -0
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/cloud/asset_defs.py +103 -158
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/cloud/cli.py +3 -4
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/cloud/ops.py +7 -5
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/cloud/resources.py +9 -4
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/cloud/types.py +5 -2
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/cloud/utils.py +8 -7
- dagster_dbt-0.28.8/dagster_dbt/cloud_v2/__init__.py +10 -0
- dagster_dbt-0.28.8/dagster_dbt/cloud_v2/asset_decorator.py +81 -0
- dagster_dbt-0.28.8/dagster_dbt/cloud_v2/cli_invocation.py +74 -0
- dagster_dbt-0.28.8/dagster_dbt/cloud_v2/client.py +511 -0
- dagster_dbt-0.28.8/dagster_dbt/cloud_v2/resources.py +462 -0
- dagster_dbt-0.28.8/dagster_dbt/cloud_v2/run_handler.py +251 -0
- dagster_dbt-0.28.8/dagster_dbt/cloud_v2/sensor_builder.py +254 -0
- dagster_dbt-0.28.8/dagster_dbt/cloud_v2/types.py +143 -0
- dagster_dbt-0.28.8/dagster_dbt/compat.py +107 -0
- dagster_dbt-0.28.8/dagster_dbt/components/dbt_project/component.py +545 -0
- dagster_dbt-0.28.8/dagster_dbt/components/dbt_project/scaffolder.py +65 -0
- dagster_dbt-0.28.8/dagster_dbt/core/__init__.py +0 -0
- dagster_dbt-0.28.8/dagster_dbt/core/dbt_cli_event.py +612 -0
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/core/dbt_cli_invocation.py +62 -42
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/core/dbt_event_iterator.py +58 -45
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/core/resource.py +138 -326
- dagster_dbt-0.28.8/dagster_dbt/core/utils.py +19 -0
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/dagster_dbt_translator.py +278 -49
- dagster_dbt-0.28.8/dagster_dbt/dbt_core_version.py +1 -0
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/dbt_manifest.py +6 -5
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/dbt_manifest_asset_selection.py +62 -22
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/dbt_project.py +69 -6
- dagster_dbt-0.28.8/dagster_dbt/dbt_project_manager.py +173 -0
- dagster_dbt-0.28.8/dagster_dbt/dbt_version.py +0 -0
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/errors.py +4 -0
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/freshness_builder.py +18 -13
- dagster_dbt-0.28.8/dagster_dbt/include/pyproject.toml.jinja +28 -0
- dagster_dbt-0.28.8/dagster_dbt/include/scaffold/__init__.py.jinja +0 -0
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/include/setup.py.jinja +1 -0
- dagster_dbt-0.28.8/dagster_dbt/metadata_set.py +18 -0
- dagster_dbt-0.28.8/dagster_dbt/utils.py +229 -0
- dagster_dbt-0.28.8/dagster_dbt/version.py +1 -0
- dagster_dbt-0.28.8/dagster_dbt.egg-info/PKG-INFO +48 -0
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt.egg-info/SOURCES.txt +16 -0
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt.egg-info/entry_points.txt +3 -0
- dagster_dbt-0.28.8/dagster_dbt.egg-info/requires.txt +23 -0
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/setup.py +23 -12
- dagster-dbt-0.24.3/PKG-INFO +0 -18
- dagster-dbt-0.24.3/README.md +0 -4
- dagster-dbt-0.24.3/dagster_dbt/asset_utils.py +0 -1124
- dagster-dbt-0.24.3/dagster_dbt/cloud/__init__.py +0 -8
- dagster-dbt-0.24.3/dagster_dbt/core/dbt_cli_event.py +0 -485
- dagster-dbt-0.24.3/dagster_dbt/core/utils.py +0 -91
- dagster-dbt-0.24.3/dagster_dbt/dbt_core_version.py +0 -1
- dagster-dbt-0.24.3/dagster_dbt/include/pyproject.toml.jinja +0 -7
- dagster-dbt-0.24.3/dagster_dbt/utils.py +0 -143
- dagster-dbt-0.24.3/dagster_dbt/version.py +0 -1
- dagster-dbt-0.24.3/dagster_dbt.egg-info/PKG-INFO +0 -18
- dagster-dbt-0.24.3/dagster_dbt.egg-info/requires.txt +0 -15
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/cli/__init__.py +0 -0
- {dagster-dbt-0.24.3/dagster_dbt/core → dagster_dbt-0.28.8/dagster_dbt/components}/__init__.py +0 -0
- /dagster-dbt-0.24.3/dagster_dbt/include/scaffold/__init__.py.jinja → /dagster_dbt-0.28.8/dagster_dbt/components/dbt_project/__init__.py +0 -0
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/include/__init__.py +0 -0
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/include/scaffold/assets.py.jinja +0 -0
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/include/scaffold/definitions.py.jinja +0 -0
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/include/scaffold/project.py.jinja +0 -0
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/include/scaffold/schedules.py.jinja +0 -0
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt/py.typed +0 -0
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt.egg-info/dependency_links.txt +0 -0
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt.egg-info/not-zip-safe +0 -0
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/dagster_dbt.egg-info/top_level.txt +0 -0
- {dagster-dbt-0.24.3 → dagster_dbt-0.28.8}/setup.cfg +0 -0
|
@@ -186,7 +186,7 @@
|
|
|
186
186
|
same "printed page" as the copyright notice for easier
|
|
187
187
|
identification within third-party archives.
|
|
188
188
|
|
|
189
|
-
Copyright
|
|
189
|
+
Copyright 2025 Dagster Labs, Inc.
|
|
190
190
|
|
|
191
191
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
192
192
|
you may not use this file except in compliance with the License.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: dagster-dbt
|
|
3
|
+
Version: 0.28.8
|
|
4
|
+
Summary: A Dagster integration for dbt
|
|
5
|
+
Home-page: https://github.com/dagster-io/dagster/tree/master/python_modules/libraries/dagster-dbt
|
|
6
|
+
Author: Dagster Labs
|
|
7
|
+
Author-email: hello@dagsterlabs.com
|
|
8
|
+
License: Apache-2.0
|
|
9
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
14
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Requires-Python: >=3.10,<3.15
|
|
17
|
+
License-File: LICENSE
|
|
18
|
+
Requires-Dist: dagster==1.12.8
|
|
19
|
+
Requires-Dist: dbt-core<1.11,>=1.7
|
|
20
|
+
Requires-Dist: gitpython
|
|
21
|
+
Requires-Dist: Jinja2
|
|
22
|
+
Requires-Dist: networkx
|
|
23
|
+
Requires-Dist: orjson
|
|
24
|
+
Requires-Dist: requests
|
|
25
|
+
Requires-Dist: rich
|
|
26
|
+
Requires-Dist: sqlglot[rs]<28.1.0
|
|
27
|
+
Requires-Dist: typer>=0.9.0
|
|
28
|
+
Requires-Dist: packaging
|
|
29
|
+
Provides-Extra: test-bare
|
|
30
|
+
Requires-Dist: pytest-rerunfailures; extra == "test-bare"
|
|
31
|
+
Requires-Dist: pytest-order; extra == "test-bare"
|
|
32
|
+
Provides-Extra: test
|
|
33
|
+
Requires-Dist: pytest-rerunfailures; extra == "test"
|
|
34
|
+
Requires-Dist: pytest-order; extra == "test"
|
|
35
|
+
Requires-Dist: dagster-duckdb; extra == "test"
|
|
36
|
+
Requires-Dist: dagster-duckdb-pandas; extra == "test"
|
|
37
|
+
Requires-Dist: dbt-duckdb<1.9.2; extra == "test"
|
|
38
|
+
Requires-Dist: duckdb<1.4.0; extra == "test"
|
|
39
|
+
Dynamic: author
|
|
40
|
+
Dynamic: author-email
|
|
41
|
+
Dynamic: classifier
|
|
42
|
+
Dynamic: home-page
|
|
43
|
+
Dynamic: license
|
|
44
|
+
Dynamic: license-file
|
|
45
|
+
Dynamic: provides-extra
|
|
46
|
+
Dynamic: requires-dist
|
|
47
|
+
Dynamic: requires-python
|
|
48
|
+
Dynamic: summary
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
from .asset_decorator import dbt_assets as dbt_assets
|
|
2
|
-
from .asset_specs import build_dbt_asset_specs as build_dbt_asset_specs
|
|
3
|
-
from .asset_utils import (
|
|
1
|
+
from dagster_dbt.asset_decorator import dbt_assets as dbt_assets
|
|
2
|
+
from dagster_dbt.asset_specs import build_dbt_asset_specs as build_dbt_asset_specs
|
|
3
|
+
from dagster_dbt.asset_utils import (
|
|
4
4
|
build_dbt_asset_selection as build_dbt_asset_selection,
|
|
5
5
|
build_schedule_from_dbt_selection as build_schedule_from_dbt_selection,
|
|
6
6
|
default_group_from_dbt_resource_props as default_group_from_dbt_resource_props,
|
|
@@ -10,7 +10,7 @@ from .asset_utils import (
|
|
|
10
10
|
get_asset_keys_by_output_name_for_source as get_asset_keys_by_output_name_for_source,
|
|
11
11
|
group_from_dbt_resource_props_fallback_to_directory as group_from_dbt_resource_props_fallback_to_directory,
|
|
12
12
|
)
|
|
13
|
-
from .cloud import (
|
|
13
|
+
from dagster_dbt.cloud import (
|
|
14
14
|
DbtCloudClientResource as DbtCloudClientResource,
|
|
15
15
|
DbtCloudOutput as DbtCloudOutput,
|
|
16
16
|
DbtCloudResource as DbtCloudResource,
|
|
@@ -18,28 +18,39 @@ from .cloud import (
|
|
|
18
18
|
dbt_cloud_run_op as dbt_cloud_run_op,
|
|
19
19
|
load_assets_from_dbt_cloud_job as load_assets_from_dbt_cloud_job,
|
|
20
20
|
)
|
|
21
|
-
from .
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
from dagster_dbt.cloud_v2 import (
|
|
22
|
+
DbtCloudCredentials as DbtCloudCredentials,
|
|
23
|
+
DbtCloudWorkspace as DbtCloudWorkspace,
|
|
24
|
+
build_dbt_cloud_polling_sensor as build_dbt_cloud_polling_sensor,
|
|
25
|
+
dbt_cloud_assets as dbt_cloud_assets,
|
|
26
|
+
load_dbt_cloud_asset_specs as load_dbt_cloud_asset_specs,
|
|
27
|
+
load_dbt_cloud_check_specs as load_dbt_cloud_check_specs,
|
|
28
|
+
)
|
|
29
|
+
from dagster_dbt.components.dbt_project.component import DbtProjectComponent as DbtProjectComponent
|
|
30
|
+
from dagster_dbt.core.dbt_cli_event import DbtCliEventMessage as DbtCliEventMessage
|
|
31
|
+
from dagster_dbt.core.dbt_cli_invocation import DbtCliInvocation as DbtCliInvocation
|
|
32
|
+
from dagster_dbt.core.resource import DbtCliResource as DbtCliResource
|
|
33
|
+
from dagster_dbt.dagster_dbt_translator import (
|
|
25
34
|
DagsterDbtTranslator as DagsterDbtTranslator,
|
|
26
35
|
DagsterDbtTranslatorSettings as DagsterDbtTranslatorSettings,
|
|
27
36
|
)
|
|
28
|
-
from .dbt_manifest_asset_selection import
|
|
29
|
-
|
|
37
|
+
from dagster_dbt.dbt_manifest_asset_selection import (
|
|
38
|
+
DbtManifestAssetSelection as DbtManifestAssetSelection,
|
|
39
|
+
)
|
|
40
|
+
from dagster_dbt.dbt_project import (
|
|
30
41
|
DagsterDbtProjectPreparer as DagsterDbtProjectPreparer,
|
|
31
42
|
DbtProject as DbtProject,
|
|
32
43
|
DbtProjectPreparer as DbtProjectPreparer,
|
|
33
44
|
)
|
|
34
|
-
from .errors import (
|
|
45
|
+
from dagster_dbt.errors import (
|
|
35
46
|
DagsterDbtCliRuntimeError as DagsterDbtCliRuntimeError,
|
|
36
47
|
DagsterDbtCloudJobInvariantViolationError as DagsterDbtCloudJobInvariantViolationError,
|
|
37
48
|
DagsterDbtError as DagsterDbtError,
|
|
38
49
|
)
|
|
39
|
-
from .freshness_builder import (
|
|
50
|
+
from dagster_dbt.freshness_builder import (
|
|
40
51
|
build_freshness_checks_from_dbt_assets as build_freshness_checks_from_dbt_assets,
|
|
41
52
|
)
|
|
42
|
-
from .version import __version__ as __version__
|
|
53
|
+
from dagster_dbt.version import __version__ as __version__
|
|
43
54
|
|
|
44
55
|
# isort: split
|
|
45
56
|
|
|
@@ -47,17 +58,26 @@ from .version import __version__ as __version__
|
|
|
47
58
|
# ##### DYNAMIC IMPORTS
|
|
48
59
|
# ########################
|
|
49
60
|
import importlib
|
|
50
|
-
from
|
|
61
|
+
from collections.abc import Mapping, Sequence
|
|
62
|
+
from typing import Any, Final, Tuple # noqa: F401, UP035
|
|
51
63
|
|
|
52
64
|
from dagster._annotations import deprecated
|
|
53
|
-
from dagster._core.libraries import DagsterLibraryRegistry
|
|
54
65
|
from dagster._utils.warnings import deprecation_warning
|
|
55
|
-
from
|
|
66
|
+
from dagster_shared.libraries import DagsterLibraryRegistry
|
|
67
|
+
|
|
68
|
+
from dagster_dbt.compat import DBT_PYTHON_VERSION
|
|
56
69
|
|
|
57
70
|
DagsterLibraryRegistry.register("dagster-dbt", __version__)
|
|
58
71
|
|
|
72
|
+
if DBT_PYTHON_VERSION is not None:
|
|
73
|
+
DagsterLibraryRegistry.register(
|
|
74
|
+
"dbt-core", DBT_PYTHON_VERSION.base_version, is_dagster_package=False
|
|
75
|
+
)
|
|
76
|
+
else:
|
|
77
|
+
DagsterLibraryRegistry.register("dbt-fusion", "unknown", is_dagster_package=False)
|
|
78
|
+
|
|
59
79
|
|
|
60
|
-
_DEPRECATED: Final[Mapping[str,
|
|
80
|
+
_DEPRECATED: Final[Mapping[str, tuple[str, str, str]]] = {
|
|
61
81
|
##### EXAMPLE
|
|
62
82
|
# "Foo": (
|
|
63
83
|
# "dagster.some.module",
|
|
@@ -66,7 +86,7 @@ _DEPRECATED: Final[Mapping[str, Tuple[str, str, str]]] = {
|
|
|
66
86
|
# ),
|
|
67
87
|
}
|
|
68
88
|
|
|
69
|
-
_DEPRECATED_WARNING: Final[Mapping[str,
|
|
89
|
+
_DEPRECATED_WARNING: Final[Mapping[str, tuple[str, str, str]]] = {
|
|
70
90
|
##### EXAMPLE
|
|
71
91
|
# "Foo": (
|
|
72
92
|
# "dagster.some.module",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
from
|
|
1
|
+
from collections.abc import Callable, Mapping
|
|
2
|
+
from typing import Any, Optional
|
|
2
3
|
|
|
3
4
|
from dagster import (
|
|
4
5
|
AssetsDefinition,
|
|
@@ -11,32 +12,37 @@ from dagster import (
|
|
|
11
12
|
)
|
|
12
13
|
from dagster._utils.warnings import suppress_dagster_warnings
|
|
13
14
|
|
|
14
|
-
from dagster_dbt.
|
|
15
|
-
|
|
16
|
-
from .asset_utils import (
|
|
15
|
+
from dagster_dbt.asset_utils import (
|
|
17
16
|
DAGSTER_DBT_EXCLUDE_METADATA_KEY,
|
|
18
17
|
DAGSTER_DBT_SELECT_METADATA_KEY,
|
|
19
|
-
|
|
18
|
+
DAGSTER_DBT_SELECTOR_METADATA_KEY,
|
|
19
|
+
DBT_DEFAULT_EXCLUDE,
|
|
20
|
+
DBT_DEFAULT_SELECT,
|
|
21
|
+
DBT_DEFAULT_SELECTOR,
|
|
22
|
+
build_dbt_specs,
|
|
20
23
|
)
|
|
21
|
-
from .dagster_dbt_translator import DagsterDbtTranslator, validate_translator
|
|
22
|
-
from .dbt_manifest import DbtManifestParam, validate_manifest
|
|
24
|
+
from dagster_dbt.dagster_dbt_translator import DagsterDbtTranslator, validate_translator
|
|
25
|
+
from dagster_dbt.dbt_manifest import DbtManifestParam, validate_manifest
|
|
26
|
+
from dagster_dbt.dbt_project import DbtProject
|
|
23
27
|
|
|
24
28
|
|
|
25
29
|
@suppress_dagster_warnings
|
|
26
30
|
def dbt_assets(
|
|
27
31
|
*,
|
|
28
32
|
manifest: DbtManifestParam,
|
|
29
|
-
select: str =
|
|
30
|
-
exclude: Optional[str] =
|
|
33
|
+
select: str = DBT_DEFAULT_SELECT,
|
|
34
|
+
exclude: Optional[str] = DBT_DEFAULT_EXCLUDE,
|
|
35
|
+
selector: Optional[str] = DBT_DEFAULT_SELECTOR,
|
|
31
36
|
name: Optional[str] = None,
|
|
32
37
|
io_manager_key: Optional[str] = None,
|
|
33
38
|
partitions_def: Optional[PartitionsDefinition] = None,
|
|
34
39
|
dagster_dbt_translator: Optional[DagsterDbtTranslator] = None,
|
|
35
40
|
backfill_policy: Optional[BackfillPolicy] = None,
|
|
36
41
|
op_tags: Optional[Mapping[str, Any]] = None,
|
|
37
|
-
required_resource_keys: Optional[
|
|
42
|
+
required_resource_keys: Optional[set[str]] = None,
|
|
38
43
|
project: Optional[DbtProject] = None,
|
|
39
44
|
retry_policy: Optional[RetryPolicy] = None,
|
|
45
|
+
pool: Optional[str] = None,
|
|
40
46
|
) -> Callable[[Callable[..., Any]], AssetsDefinition]:
|
|
41
47
|
"""Create a definition for how to compute a set of dbt resources, described by a manifest.json.
|
|
42
48
|
When invoking dbt commands using :py:class:`~dagster_dbt.DbtCliResource`'s
|
|
@@ -52,6 +58,8 @@ def dbt_assets(
|
|
|
52
58
|
to include. Defaults to ``fqn:*``.
|
|
53
59
|
exclude (Optional[str]): A dbt selection string for the models in a project that you want
|
|
54
60
|
to exclude. Defaults to "".
|
|
61
|
+
selector (Optional[str]): A dbt selector for the models in a project that you want to
|
|
62
|
+
include. Cannot be combined with select or exclude. Defaults to None.
|
|
55
63
|
name (Optional[str]): The name of the op.
|
|
56
64
|
io_manager_key (Optional[str]): The IO manager key that will be set on each of the returned
|
|
57
65
|
assets. When other ops are downstream of the loaded assets, the IOManager specified
|
|
@@ -72,6 +80,8 @@ def dbt_assets(
|
|
|
72
80
|
project location and manifest. Not required, but needed to attach code references from
|
|
73
81
|
model code to Dagster assets.
|
|
74
82
|
retry_policy (Optional[RetryPolicy]): The retry policy for the op that computes the asset.
|
|
83
|
+
pool (Optional[str]): A string that identifies the concurrency pool that governs the dbt
|
|
84
|
+
assets' execution.
|
|
75
85
|
|
|
76
86
|
Examples:
|
|
77
87
|
Running ``dbt build`` for a dbt project:
|
|
@@ -303,16 +313,12 @@ def dbt_assets(
|
|
|
303
313
|
dagster_dbt_translator = validate_translator(dagster_dbt_translator or DagsterDbtTranslator())
|
|
304
314
|
manifest = validate_manifest(manifest)
|
|
305
315
|
|
|
306
|
-
(
|
|
307
|
-
|
|
308
|
-
outs,
|
|
309
|
-
internal_asset_deps,
|
|
310
|
-
check_specs,
|
|
311
|
-
) = build_dbt_multi_asset_args(
|
|
316
|
+
specs, check_specs = build_dbt_specs(
|
|
317
|
+
translator=dagster_dbt_translator,
|
|
312
318
|
manifest=manifest,
|
|
313
|
-
dagster_dbt_translator=dagster_dbt_translator,
|
|
314
319
|
select=select,
|
|
315
|
-
exclude=exclude or
|
|
320
|
+
exclude=exclude or DBT_DEFAULT_EXCLUDE,
|
|
321
|
+
selector=selector or DBT_DEFAULT_SELECTOR,
|
|
316
322
|
io_manager_key=io_manager_key,
|
|
317
323
|
project=project,
|
|
318
324
|
)
|
|
@@ -329,9 +335,16 @@ def dbt_assets(
|
|
|
329
335
|
" with op_tags"
|
|
330
336
|
)
|
|
331
337
|
|
|
338
|
+
if op_tags and DAGSTER_DBT_SELECTOR_METADATA_KEY in op_tags:
|
|
339
|
+
raise DagsterInvalidDefinitionError(
|
|
340
|
+
f"To specify a dbt selector, use the 'selector' argument, not '{DAGSTER_DBT_SELECTOR_METADATA_KEY}'"
|
|
341
|
+
" with op_tags"
|
|
342
|
+
)
|
|
343
|
+
|
|
332
344
|
resolved_op_tags = {
|
|
333
345
|
**({DAGSTER_DBT_SELECT_METADATA_KEY: select} if select else {}),
|
|
334
346
|
**({DAGSTER_DBT_EXCLUDE_METADATA_KEY: exclude} if exclude else {}),
|
|
347
|
+
**({DAGSTER_DBT_SELECTOR_METADATA_KEY: selector} if selector else {}),
|
|
335
348
|
**(op_tags if op_tags else {}),
|
|
336
349
|
}
|
|
337
350
|
|
|
@@ -343,16 +356,15 @@ def dbt_assets(
|
|
|
343
356
|
backfill_policy = BackfillPolicy.single_run()
|
|
344
357
|
|
|
345
358
|
return multi_asset(
|
|
346
|
-
outs=outs,
|
|
347
359
|
name=name,
|
|
348
|
-
|
|
349
|
-
|
|
360
|
+
specs=specs,
|
|
361
|
+
check_specs=check_specs,
|
|
362
|
+
can_subset=True,
|
|
350
363
|
required_resource_keys=required_resource_keys,
|
|
351
|
-
compute_kind="dbt",
|
|
352
364
|
partitions_def=partitions_def,
|
|
353
|
-
can_subset=True,
|
|
354
365
|
op_tags=resolved_op_tags,
|
|
355
|
-
check_specs=check_specs,
|
|
356
366
|
backfill_policy=backfill_policy,
|
|
357
367
|
retry_policy=retry_policy,
|
|
368
|
+
pool=pool,
|
|
369
|
+
allow_arbitrary_check_specs=True,
|
|
358
370
|
)
|
|
@@ -1,22 +1,26 @@
|
|
|
1
|
-
from
|
|
1
|
+
from collections.abc import Sequence
|
|
2
|
+
from typing import Optional
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
from dagster import AssetDep, AssetKey, AssetSpec
|
|
5
|
-
from dagster._annotations import experimental
|
|
4
|
+
from dagster import AssetSpec
|
|
6
5
|
|
|
7
|
-
from .asset_utils import
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
from dagster_dbt.asset_utils import (
|
|
7
|
+
DBT_DEFAULT_EXCLUDE,
|
|
8
|
+
DBT_DEFAULT_SELECT,
|
|
9
|
+
DBT_DEFAULT_SELECTOR,
|
|
10
|
+
build_dbt_specs,
|
|
11
|
+
)
|
|
12
|
+
from dagster_dbt.dagster_dbt_translator import DagsterDbtTranslator, validate_translator
|
|
13
|
+
from dagster_dbt.dbt_manifest import DbtManifestParam, validate_manifest
|
|
14
|
+
from dagster_dbt.dbt_project import DbtProject
|
|
11
15
|
|
|
12
16
|
|
|
13
|
-
@experimental
|
|
14
17
|
def build_dbt_asset_specs(
|
|
15
18
|
*,
|
|
16
19
|
manifest: DbtManifestParam,
|
|
17
20
|
dagster_dbt_translator: Optional[DagsterDbtTranslator] = None,
|
|
18
|
-
select: str =
|
|
19
|
-
exclude: Optional[str] =
|
|
21
|
+
select: str = DBT_DEFAULT_SELECT,
|
|
22
|
+
exclude: Optional[str] = DBT_DEFAULT_EXCLUDE,
|
|
23
|
+
selector: Optional[str] = DBT_DEFAULT_SELECTOR,
|
|
20
24
|
project: Optional[DbtProject] = None,
|
|
21
25
|
) -> Sequence[AssetSpec]:
|
|
22
26
|
"""Build a list of asset specs from a set of dbt resources selected from a dbt manifest.
|
|
@@ -32,6 +36,8 @@ def build_dbt_asset_specs(
|
|
|
32
36
|
to include. Defaults to ``fqn:*``.
|
|
33
37
|
exclude (Optional[str]): A dbt selection string for the models in a project that you want
|
|
34
38
|
to exclude. Defaults to "".
|
|
39
|
+
selector (Optional[str]): A dbt selector for the models in a project that you want
|
|
40
|
+
to include. Defaults to None.
|
|
35
41
|
project (Optional[DbtProject]): A DbtProject instance which provides a pointer to the dbt
|
|
36
42
|
project location and manifest. Not required, but needed to attach code references from
|
|
37
43
|
model code to Dagster assets.
|
|
@@ -42,31 +48,18 @@ def build_dbt_asset_specs(
|
|
|
42
48
|
manifest = validate_manifest(manifest)
|
|
43
49
|
dagster_dbt_translator = validate_translator(dagster_dbt_translator or DagsterDbtTranslator())
|
|
44
50
|
|
|
45
|
-
(
|
|
46
|
-
_,
|
|
47
|
-
outs,
|
|
48
|
-
internal_asset_deps,
|
|
49
|
-
_,
|
|
50
|
-
) = build_dbt_multi_asset_args(
|
|
51
|
+
specs, _ = build_dbt_specs(
|
|
51
52
|
manifest=manifest,
|
|
52
|
-
|
|
53
|
+
translator=dagster_dbt_translator,
|
|
53
54
|
select=select,
|
|
54
|
-
exclude=exclude or
|
|
55
|
+
exclude=exclude or DBT_DEFAULT_EXCLUDE,
|
|
56
|
+
selector=selector or DBT_DEFAULT_SELECTOR,
|
|
55
57
|
io_manager_key=None,
|
|
56
58
|
project=project,
|
|
57
59
|
)
|
|
58
60
|
|
|
59
|
-
|
|
60
|
-
asset_out.to_spec(
|
|
61
|
-
key=check.inst(asset_out.key, AssetKey),
|
|
62
|
-
deps=[AssetDep(asset=dep) for dep in internal_asset_deps.get(output_name, set())],
|
|
63
|
-
)
|
|
61
|
+
return [
|
|
64
62
|
# Allow specs to be represented as external assets by adhering to external asset invariants.
|
|
65
|
-
.
|
|
66
|
-
|
|
67
|
-
code_version=None,
|
|
68
|
-
)
|
|
69
|
-
for output_name, asset_out in outs.items()
|
|
63
|
+
spec.replace_attributes(skippable=False, code_version=None)
|
|
64
|
+
for spec in specs
|
|
70
65
|
]
|
|
71
|
-
|
|
72
|
-
return specs
|