dagster-dbt 0.28.10__tar.gz → 0.28.11__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.10/dagster_dbt.egg-info → dagster_dbt-0.28.11}/PKG-INFO +2 -2
  2. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/asset_utils.py +51 -7
  3. dagster_dbt-0.28.11/dagster_dbt/version.py +1 -0
  4. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11/dagster_dbt.egg-info}/PKG-INFO +2 -2
  5. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt.egg-info/requires.txt +1 -1
  6. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/setup.py +1 -1
  7. dagster_dbt-0.28.10/dagster_dbt/version.py +0 -1
  8. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/LICENSE +0 -0
  9. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/MANIFEST.in +0 -0
  10. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/README.md +0 -0
  11. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/__init__.py +0 -0
  12. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/asset_decorator.py +0 -0
  13. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/asset_specs.py +0 -0
  14. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/cli/__init__.py +0 -0
  15. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/cli/app.py +0 -0
  16. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/cloud/__init__.py +0 -0
  17. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/cloud/asset_defs.py +0 -0
  18. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/cloud/cli.py +0 -0
  19. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/cloud/ops.py +0 -0
  20. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/cloud/resources.py +0 -0
  21. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/cloud/types.py +0 -0
  22. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/cloud/utils.py +0 -0
  23. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/cloud_v2/__init__.py +0 -0
  24. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/cloud_v2/asset_decorator.py +0 -0
  25. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/cloud_v2/cli_invocation.py +0 -0
  26. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/cloud_v2/client.py +0 -0
  27. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/cloud_v2/resources.py +0 -0
  28. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/cloud_v2/run_handler.py +0 -0
  29. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/cloud_v2/sensor_builder.py +0 -0
  30. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/cloud_v2/types.py +0 -0
  31. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/compat.py +0 -0
  32. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/components/__init__.py +0 -0
  33. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/components/dbt_project/__init__.py +0 -0
  34. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/components/dbt_project/component.py +0 -0
  35. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/components/dbt_project/scaffolder.py +0 -0
  36. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/core/__init__.py +0 -0
  37. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/core/dbt_cli_event.py +0 -0
  38. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/core/dbt_cli_invocation.py +0 -0
  39. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/core/dbt_event_iterator.py +0 -0
  40. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/core/resource.py +0 -0
  41. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/core/utils.py +0 -0
  42. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/dagster_dbt_translator.py +0 -0
  43. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/dbt_core_version.py +0 -0
  44. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/dbt_manifest.py +0 -0
  45. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/dbt_manifest_asset_selection.py +0 -0
  46. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/dbt_project.py +0 -0
  47. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/dbt_project_manager.py +0 -0
  48. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/dbt_version.py +0 -0
  49. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/errors.py +0 -0
  50. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/freshness_builder.py +0 -0
  51. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/include/__init__.py +0 -0
  52. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/include/pyproject.toml.jinja +0 -0
  53. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/include/scaffold/__init__.py.jinja +0 -0
  54. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/include/scaffold/assets.py.jinja +0 -0
  55. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/include/scaffold/definitions.py.jinja +0 -0
  56. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/include/scaffold/project.py.jinja +0 -0
  57. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/include/scaffold/schedules.py.jinja +0 -0
  58. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/include/setup.py.jinja +0 -0
  59. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/metadata_set.py +0 -0
  60. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/py.typed +0 -0
  61. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt/utils.py +0 -0
  62. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt.egg-info/SOURCES.txt +0 -0
  63. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt.egg-info/dependency_links.txt +0 -0
  64. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt.egg-info/entry_points.txt +0 -0
  65. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt.egg-info/not-zip-safe +0 -0
  66. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/dagster_dbt.egg-info/top_level.txt +0 -0
  67. {dagster_dbt-0.28.10 → dagster_dbt-0.28.11}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dagster-dbt
3
- Version: 0.28.10
3
+ Version: 0.28.11
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
@@ -15,7 +15,7 @@ Classifier: License :: OSI Approved :: Apache Software License
15
15
  Classifier: Operating System :: OS Independent
16
16
  Requires-Python: >=3.10,<3.14
17
17
  License-File: LICENSE
18
- Requires-Dist: dagster==1.12.10
18
+ Requires-Dist: dagster==1.12.11
19
19
  Requires-Dist: dbt-core<1.12,>=1.7
20
20
  Requires-Dist: gitpython
21
21
  Requires-Dist: Jinja2
@@ -63,6 +63,42 @@ DBT_EMPTY_INDIRECT_SELECTION: Final[str] = "empty"
63
63
  # https://github.com/dagster-io/dagster/issues/16997
64
64
  _SELECTION_ARGS_THRESHOLD: Final[int] = 200
65
65
 
66
+
67
+ def _parse_selection_args(
68
+ selection_args: list[str],
69
+ ) -> tuple[Optional[list[str]], Optional[list[str]]]:
70
+ """Parse selection args into separate select and exclude resource lists.
71
+
72
+ This function is designed for dagster-dbt's internal argument format, where select/exclude
73
+ values are passed as a single space-separated string (e.g., ["--select", "model1 model2"]).
74
+ This matches how dagster-dbt constructs these arguments in get_subset_selection_for_context.
75
+ It does not handle the dbt CLI's alternative format of multiple --select flags.
76
+
77
+ Args:
78
+ selection_args: CLI arguments in dagster-dbt's internal format,
79
+ e.g., ["--select", "model1 model2", "--exclude", "model3"]
80
+
81
+ Returns:
82
+ Tuple of (select_resources, exclude_resources) where each is a list of resource names
83
+ or None if not present.
84
+ """
85
+ select_resources: Optional[list[str]] = None
86
+ exclude_resources: Optional[list[str]] = None
87
+
88
+ i = 0
89
+ while i < len(selection_args):
90
+ if selection_args[i] == "--select" and i + 1 < len(selection_args):
91
+ select_resources = selection_args[i + 1].split(" ")
92
+ i += 2
93
+ elif selection_args[i] == "--exclude" and i + 1 < len(selection_args):
94
+ exclude_resources = selection_args[i + 1].split(" ")
95
+ i += 2
96
+ else:
97
+ i += 1
98
+
99
+ return select_resources, exclude_resources
100
+
101
+
66
102
  DUPLICATE_ASSET_KEY_ERROR_MESSAGE = (
67
103
  "The following dbt resources are configured with identical Dagster asset keys."
68
104
  " Please ensure that each dbt resource generates a unique Dagster asset key."
@@ -464,11 +500,11 @@ def get_updated_cli_invocation_params_for_context(
464
500
  dagster_dbt_translator=dagster_dbt_translator,
465
501
  current_dbt_indirect_selection_env=indirect_selection,
466
502
  )
467
- if (
468
- selection_args[0] == "--select"
469
- and project_dir
470
- and len(resources := selection_args[1].split(" ")) > _SELECTION_ARGS_THRESHOLD
471
- ):
503
+ # Parse selection args to get select and exclude resources
504
+ select_resources, exclude_resources = _parse_selection_args(selection_args)
505
+ total_resources = len(select_resources or []) + len(exclude_resources or [])
506
+
507
+ if select_resources and project_dir and total_resources > _SELECTION_ARGS_THRESHOLD:
472
508
  temp_project_dir = tempfile.mkdtemp()
473
509
  shutil.copytree(project_dir, temp_project_dir, dirs_exist_ok=True)
474
510
  selectors_path = Path(temp_project_dir) / "selectors.yml"
@@ -478,17 +514,25 @@ def get_updated_cli_invocation_params_for_context(
478
514
  selectors_path.unlink()
479
515
 
480
516
  selector_name = f"dagster_run_{context.run_id}"
517
+ # Build selector definition with union of selected resources
518
+ # and optional exclude section nested inside the union
519
+ # See: https://docs.getdbt.com/reference/node-selection/yaml-selectors
520
+ # Note: exclude must be nested inside the union array, not a sibling key
521
+ union_items: list[Any] = list(select_resources)
522
+ if exclude_resources:
523
+ union_items.append({"exclude": list(exclude_resources)})
524
+
481
525
  temp_selectors = {
482
526
  "selectors": [
483
527
  {
484
528
  "name": selector_name,
485
- "definition": {"union": list(resources)},
529
+ "definition": {"union": union_items},
486
530
  }
487
531
  ]
488
532
  }
489
533
  selectors_path.write_text(yaml.safe_dump(temp_selectors))
490
534
  logger.info(
491
- f"DBT selection of {len(resources)} resources exceeds threshold of {_SELECTION_ARGS_THRESHOLD}. "
535
+ f"DBT selection of {total_resources} resources exceeds threshold of {_SELECTION_ARGS_THRESHOLD}. "
492
536
  "This may exceed system argument length limits. "
493
537
  f"Executing materialization against temporary copy of DBT project at {temp_project_dir} with ephemeral selector."
494
538
  )
@@ -0,0 +1 @@
1
+ __version__ = "0.28.11"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dagster-dbt
3
- Version: 0.28.10
3
+ Version: 0.28.11
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
@@ -15,7 +15,7 @@ Classifier: License :: OSI Approved :: Apache Software License
15
15
  Classifier: Operating System :: OS Independent
16
16
  Requires-Python: >=3.10,<3.14
17
17
  License-File: LICENSE
18
- Requires-Dist: dagster==1.12.10
18
+ Requires-Dist: dagster==1.12.11
19
19
  Requires-Dist: dbt-core<1.12,>=1.7
20
20
  Requires-Dist: gitpython
21
21
  Requires-Dist: Jinja2
@@ -1,4 +1,4 @@
1
- dagster==1.12.10
1
+ dagster==1.12.11
2
2
  dbt-core<1.12,>=1.7
3
3
  gitpython
4
4
  Jinja2
@@ -40,7 +40,7 @@ setup(
40
40
  include_package_data=True,
41
41
  python_requires=">=3.10,<3.14", # dbt-core incompatible with Python 3.14
42
42
  install_requires=[
43
- "dagster==1.12.10",
43
+ "dagster==1.12.11",
44
44
  # Follow the version support constraints for dbt Core: https://docs.getdbt.com/docs/dbt-versions/core
45
45
  f"dbt-core>=1.7,<{DBT_CORE_VERSION_UPPER_BOUND}",
46
46
  "gitpython",
@@ -1 +0,0 @@
1
- __version__ = "0.28.10"
File without changes
File without changes
File without changes
File without changes