dagster-dbt 0.28.1__tar.gz → 0.28.2__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 (67) hide show
  1. {dagster_dbt-0.28.1/dagster_dbt.egg-info → dagster_dbt-0.28.2}/PKG-INFO +3 -4
  2. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/asset_decorator.py +2 -2
  3. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/cloud/asset_defs.py +2 -2
  4. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/cloud/utils.py +2 -2
  5. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/cloud_v2/asset_decorator.py +2 -1
  6. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/compat.py +1 -2
  7. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/components/dbt_project/component.py +64 -12
  8. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/core/dbt_cli_invocation.py +1 -2
  9. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/core/dbt_event_iterator.py +2 -2
  10. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/dbt_project_manager.py +3 -1
  11. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/include/pyproject.toml.jinja +1 -1
  12. dagster_dbt-0.28.2/dagster_dbt/version.py +1 -0
  13. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2/dagster_dbt.egg-info}/PKG-INFO +3 -4
  14. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt.egg-info/requires.txt +1 -1
  15. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/setup.py +2 -3
  16. dagster_dbt-0.28.1/dagster_dbt/version.py +0 -1
  17. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/LICENSE +0 -0
  18. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/MANIFEST.in +0 -0
  19. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/README.md +0 -0
  20. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/__init__.py +0 -0
  21. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/asset_specs.py +0 -0
  22. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/asset_utils.py +0 -0
  23. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/cli/__init__.py +0 -0
  24. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/cli/app.py +0 -0
  25. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/cloud/__init__.py +0 -0
  26. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/cloud/cli.py +0 -0
  27. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/cloud/ops.py +0 -0
  28. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/cloud/resources.py +0 -0
  29. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/cloud/types.py +0 -0
  30. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/cloud_v2/__init__.py +0 -0
  31. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/cloud_v2/cli_invocation.py +0 -0
  32. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/cloud_v2/client.py +0 -0
  33. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/cloud_v2/resources.py +0 -0
  34. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/cloud_v2/run_handler.py +0 -0
  35. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/cloud_v2/sensor_builder.py +0 -0
  36. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/cloud_v2/types.py +0 -0
  37. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/components/__init__.py +0 -0
  38. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/components/dbt_project/__init__.py +0 -0
  39. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/components/dbt_project/scaffolder.py +0 -0
  40. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/core/__init__.py +0 -0
  41. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/core/dbt_cli_event.py +0 -0
  42. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/core/resource.py +0 -0
  43. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/core/utils.py +0 -0
  44. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/dagster_dbt_translator.py +0 -0
  45. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/dbt_core_version.py +0 -0
  46. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/dbt_manifest.py +0 -0
  47. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/dbt_manifest_asset_selection.py +0 -0
  48. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/dbt_project.py +0 -0
  49. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/dbt_version.py +0 -0
  50. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/errors.py +0 -0
  51. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/freshness_builder.py +0 -0
  52. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/include/__init__.py +0 -0
  53. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/include/scaffold/__init__.py.jinja +0 -0
  54. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/include/scaffold/assets.py.jinja +0 -0
  55. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/include/scaffold/definitions.py.jinja +0 -0
  56. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/include/scaffold/project.py.jinja +0 -0
  57. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/include/scaffold/schedules.py.jinja +0 -0
  58. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/include/setup.py.jinja +0 -0
  59. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/metadata_set.py +0 -0
  60. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/py.typed +0 -0
  61. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt/utils.py +0 -0
  62. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt.egg-info/SOURCES.txt +0 -0
  63. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt.egg-info/dependency_links.txt +0 -0
  64. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt.egg-info/entry_points.txt +0 -0
  65. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt.egg-info/not-zip-safe +0 -0
  66. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/dagster_dbt.egg-info/top_level.txt +0 -0
  67. {dagster_dbt-0.28.1 → dagster_dbt-0.28.2}/setup.cfg +0 -0
@@ -1,21 +1,20 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dagster-dbt
3
- Version: 0.28.1
3
+ Version: 0.28.2
4
4
  Summary: A Dagster integration for dbt
5
5
  Home-page: https://github.com/dagster-io/dagster/tree/master/python_modules/libraries/dagster-dbt
6
6
  Author: Dagster Labs
7
7
  Author-email: hello@dagsterlabs.com
8
8
  License: Apache-2.0
9
- Classifier: Programming Language :: Python :: 3.9
10
9
  Classifier: Programming Language :: Python :: 3.10
11
10
  Classifier: Programming Language :: Python :: 3.11
12
11
  Classifier: Programming Language :: Python :: 3.12
13
12
  Classifier: Programming Language :: Python :: 3.13
14
13
  Classifier: License :: OSI Approved :: Apache Software License
15
14
  Classifier: Operating System :: OS Independent
16
- Requires-Python: >=3.9,<3.14
15
+ Requires-Python: >=3.10,<3.14
17
16
  License-File: LICENSE
18
- Requires-Dist: dagster==1.12.1
17
+ Requires-Dist: dagster==1.12.2
19
18
  Requires-Dist: dbt-core<1.11,>=1.7
20
19
  Requires-Dist: gitpython
21
20
  Requires-Dist: Jinja2
@@ -1,5 +1,5 @@
1
- from collections.abc import Mapping
2
- from typing import Any, Callable, Optional
1
+ from collections.abc import Callable, Mapping
2
+ from typing import Any, Optional
3
3
 
4
4
  from dagster import (
5
5
  AssetsDefinition,
@@ -1,9 +1,9 @@
1
1
  import json
2
2
  import shlex
3
3
  from argparse import ArgumentParser, Namespace
4
- from collections.abc import Mapping, Sequence
4
+ from collections.abc import Callable, Mapping, Sequence
5
5
  from contextlib import suppress
6
- from typing import Any, Callable, Optional, Union, cast
6
+ from typing import Any, Optional, Union, cast
7
7
 
8
8
  import dagster._check as check
9
9
  from dagster import (
@@ -1,5 +1,5 @@
1
- from collections.abc import Iterator, Mapping, Sequence
2
- from typing import Any, Callable, Optional, Union
1
+ from collections.abc import Callable, Iterator, Mapping, Sequence
2
+ from typing import Any, Optional, Union
3
3
 
4
4
  import dateutil
5
5
  from dagster import (
@@ -1,4 +1,5 @@
1
- from typing import Any, Callable, Optional
1
+ from collections.abc import Callable
2
+ from typing import Any, Optional
2
3
 
3
4
  from dagster import AssetsDefinition, multi_asset
4
5
  from dagster._annotations import public
@@ -1,9 +1,8 @@
1
1
  import logging
2
2
  from enum import Enum
3
- from typing import TYPE_CHECKING, Any
3
+ from typing import TYPE_CHECKING, Any, TypeAlias
4
4
 
5
5
  from packaging import version
6
- from typing_extensions import TypeAlias
7
6
 
8
7
  # it's unclear exactly which dbt import adds a handler to the root logger, but something certainly does!
9
8
  # on this line, we keep track of the set of handlers that are on the root logger BEFORE any dbt imports
@@ -6,7 +6,7 @@ from contextvars import ContextVar
6
6
  from dataclasses import dataclass, field, replace
7
7
  from functools import cached_property
8
8
  from pathlib import Path
9
- from typing import Annotated, Any, Literal, Optional, Union
9
+ from typing import Annotated, Any, Literal, Optional, TypeAlias, Union
10
10
 
11
11
  import dagster as dg
12
12
  from dagster._annotations import public
@@ -25,10 +25,17 @@ from dagster.components.utils.translation import (
25
25
  )
26
26
  from dagster_shared import check
27
27
  from dagster_shared.serdes.objects.models.defs_state_info import DefsStateManagementType
28
- from typing_extensions import TypeAlias
29
28
 
30
- from dagster_dbt.asset_decorator import dbt_assets
31
- from dagster_dbt.asset_utils import DBT_DEFAULT_EXCLUDE, DBT_DEFAULT_SELECT, get_node
29
+ from dagster_dbt.asset_utils import (
30
+ DAGSTER_DBT_EXCLUDE_METADATA_KEY,
31
+ DAGSTER_DBT_SELECT_METADATA_KEY,
32
+ DAGSTER_DBT_SELECTOR_METADATA_KEY,
33
+ DBT_DEFAULT_EXCLUDE,
34
+ DBT_DEFAULT_SELECT,
35
+ DBT_DEFAULT_SELECTOR,
36
+ build_dbt_specs,
37
+ get_node,
38
+ )
32
39
  from dagster_dbt.components.dbt_project.scaffolder import DbtProjectComponentScaffolder
33
40
  from dagster_dbt.core.resource import DbtCliResource
34
41
  from dagster_dbt.dagster_dbt_translator import (
@@ -193,6 +200,13 @@ class DbtProjectComponent(StateBackedComponent, dg.Resolvable):
193
200
  examples=["tag:skip_dagster"],
194
201
  ),
195
202
  ] = DBT_DEFAULT_EXCLUDE
203
+ selector: Annotated[
204
+ str,
205
+ Resolver.default(
206
+ description="The dbt selector for models in the project you want to include.",
207
+ examples=["custom_selector"],
208
+ ),
209
+ ] = DBT_DEFAULT_SELECTOR
196
210
  translation: Annotated[
197
211
  Optional[TranslationFn[Mapping[str, Any]]],
198
212
  TranslationFnResolver(template_vars_for_translation_fn=lambda data: {"node": data}),
@@ -218,11 +232,38 @@ class DbtProjectComponent(StateBackedComponent, dg.Resolvable):
218
232
  @property
219
233
  def defs_state_config(self) -> DefsStateConfig:
220
234
  return DefsStateConfig(
221
- key=f"{self.__class__.__name__}[{self._project_manager.defs_state_discriminator}]",
235
+ key=f"DbtProjectComponent[{self._project_manager.defs_state_discriminator}]",
222
236
  management_type=DefsStateManagementType.LOCAL_FILESYSTEM,
223
237
  refresh_if_dev=self.prepare_if_dev,
224
238
  )
225
239
 
240
+ @property
241
+ def op_config_schema(self) -> Optional[type[dg.Config]]:
242
+ return None
243
+
244
+ @property
245
+ def config_cls(self) -> Optional[type[dg.Config]]:
246
+ """Internal property that returns the config schema for the op.
247
+
248
+ Delegates to op_config_schema for backwards compatibility and consistency
249
+ with other component types.
250
+ """
251
+ return self.op_config_schema
252
+
253
+ def _get_op_spec(self, project: DbtProject) -> OpSpec:
254
+ default = self.op or OpSpec(name=project.name)
255
+ # always inject required tags
256
+ return default.model_copy(
257
+ update=dict(
258
+ tags={
259
+ **(default.tags or {}),
260
+ **({DAGSTER_DBT_SELECT_METADATA_KEY: self.select} if self.select else {}),
261
+ **({DAGSTER_DBT_EXCLUDE_METADATA_KEY: self.exclude} if self.exclude else {}),
262
+ **({DAGSTER_DBT_SELECTOR_METADATA_KEY: self.selector} if self.selector else {}),
263
+ }
264
+ )
265
+ )
266
+
226
267
  @cached_property
227
268
  def translator(self) -> "DagsterDbtTranslator":
228
269
  return DbtProjectComponentTranslator(self, self.translation_settings)
@@ -333,15 +374,26 @@ class DbtProjectComponent(StateBackedComponent, dg.Resolvable):
333
374
 
334
375
  res_ctx = context.resolution_context
335
376
 
336
- @dbt_assets(
337
- manifest=project.manifest_path,
338
- project=project,
339
- name=self.op.name if self.op else project.name,
340
- op_tags=self.op.tags if self.op else None,
341
- dagster_dbt_translator=self.translator,
377
+ asset_specs, check_specs = build_dbt_specs(
378
+ translator=validate_translator(self.translator),
379
+ manifest=validate_manifest(project.manifest_path),
342
380
  select=self.select,
343
381
  exclude=self.exclude,
344
- backfill_policy=self.op.backfill_policy if self.op else None,
382
+ selector=self.selector,
383
+ project=project,
384
+ io_manager_key=None,
385
+ )
386
+ op_spec = self._get_op_spec(project)
387
+
388
+ @dg.multi_asset(
389
+ specs=asset_specs,
390
+ check_specs=check_specs,
391
+ can_subset=True,
392
+ name=op_spec.name,
393
+ op_tags=op_spec.tags,
394
+ backfill_policy=op_spec.backfill_policy,
395
+ pool=op_spec.pool,
396
+ config_schema=self.config_cls.to_fields_dict() if self.config_cls else None,
345
397
  )
346
398
  def _fn(context: dg.AssetExecutionContext):
347
399
  with _set_resolution_context(res_ctx):
@@ -8,7 +8,7 @@ import sys
8
8
  from collections.abc import Iterator, Mapping, Sequence
9
9
  from dataclasses import dataclass, field, replace
10
10
  from pathlib import Path
11
- from typing import Any, Final, NamedTuple, Optional, Union, cast
11
+ from typing import Any, Final, Literal, NamedTuple, Optional, Union, cast
12
12
 
13
13
  import orjson
14
14
  from dagster import (
@@ -24,7 +24,6 @@ from dagster import (
24
24
  from dagster._annotations import public
25
25
  from dagster._core.errors import DagsterExecutionInterruptedError
26
26
  from packaging import version
27
- from typing_extensions import Literal
28
27
 
29
28
  from dagster_dbt.compat import BaseAdapter, BaseColumn, BaseRelation
30
29
  from dagster_dbt.core.dbt_cli_event import (
@@ -1,6 +1,6 @@
1
- from collections.abc import Iterator
1
+ from collections.abc import Callable, Iterator
2
2
  from concurrent.futures import ThreadPoolExecutor
3
- from typing import TYPE_CHECKING, Any, Callable, Optional, Union, cast
3
+ from typing import TYPE_CHECKING, Any, Optional, Union, cast
4
4
 
5
5
  from dagster import (
6
6
  AssetCheckResult,
@@ -9,7 +9,6 @@ from urllib.parse import quote, urlparse, urlunparse
9
9
  from dagster._core.errors import DagsterInvalidDefinitionError
10
10
  from dagster.components.resolved.base import Resolvable
11
11
  from dagster.components.resolved.model import Resolver
12
- from git import Repo
13
12
 
14
13
  from dagster_dbt.dbt_project import DbtProject
15
14
 
@@ -151,6 +150,9 @@ class RemoteGitDbtProjectManager(DbtProjectManager, Resolvable):
151
150
  return urlunparse(parts._replace(netloc=f"{token}@{parts.netloc}"))
152
151
 
153
152
  def sync(self, state_path: Path) -> None:
153
+ # defer git import to avoid side-effects on import
154
+ from git import Repo
155
+
154
156
  Repo.clone_from(self._get_clone_url(), self._local_project_dir(state_path), depth=1)
155
157
  project = self.get_project(state_path)
156
158
  project.preparer.prepare(project)
@@ -3,7 +3,7 @@ name = "{{ project_name }}"
3
3
  version = "0.1.0"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
- requires-python = ">=3.9,<3.14"
6
+ requires-python = ">=3.10,<3.14"
7
7
  dependencies = [
8
8
  "dagster",
9
9
  "dagster-cloud",
@@ -0,0 +1 @@
1
+ __version__ = "0.28.2"
@@ -1,21 +1,20 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dagster-dbt
3
- Version: 0.28.1
3
+ Version: 0.28.2
4
4
  Summary: A Dagster integration for dbt
5
5
  Home-page: https://github.com/dagster-io/dagster/tree/master/python_modules/libraries/dagster-dbt
6
6
  Author: Dagster Labs
7
7
  Author-email: hello@dagsterlabs.com
8
8
  License: Apache-2.0
9
- Classifier: Programming Language :: Python :: 3.9
10
9
  Classifier: Programming Language :: Python :: 3.10
11
10
  Classifier: Programming Language :: Python :: 3.11
12
11
  Classifier: Programming Language :: Python :: 3.12
13
12
  Classifier: Programming Language :: Python :: 3.13
14
13
  Classifier: License :: OSI Approved :: Apache Software License
15
14
  Classifier: Operating System :: OS Independent
16
- Requires-Python: >=3.9,<3.14
15
+ Requires-Python: >=3.10,<3.14
17
16
  License-File: LICENSE
18
- Requires-Dist: dagster==1.12.1
17
+ Requires-Dist: dagster==1.12.2
19
18
  Requires-Dist: dbt-core<1.11,>=1.7
20
19
  Requires-Dist: gitpython
21
20
  Requires-Dist: Jinja2
@@ -1,4 +1,4 @@
1
- dagster==1.12.1
1
+ dagster==1.12.2
2
2
  dbt-core<1.11,>=1.7
3
3
  gitpython
4
4
  Jinja2
@@ -28,7 +28,6 @@ setup(
28
28
  description="A Dagster integration for dbt",
29
29
  url="https://github.com/dagster-io/dagster/tree/master/python_modules/libraries/dagster-dbt",
30
30
  classifiers=[
31
- "Programming Language :: Python :: 3.9",
32
31
  "Programming Language :: Python :: 3.10",
33
32
  "Programming Language :: Python :: 3.11",
34
33
  "Programming Language :: Python :: 3.12",
@@ -38,9 +37,9 @@ setup(
38
37
  ],
39
38
  packages=find_packages(exclude=["dagster_dbt_tests*"]),
40
39
  include_package_data=True,
41
- python_requires=">=3.9,<3.14",
40
+ python_requires=">=3.10,<3.14",
42
41
  install_requires=[
43
- "dagster==1.12.1",
42
+ "dagster==1.12.2",
44
43
  # Follow the version support constraints for dbt Core: https://docs.getdbt.com/docs/dbt-versions/core
45
44
  f"dbt-core>=1.7,<{DBT_CORE_VERSION_UPPER_BOUND}",
46
45
  "gitpython",
@@ -1 +0,0 @@
1
- __version__ = "0.28.1"
File without changes
File without changes
File without changes
File without changes