dagster 1.12.8__py3-none-any.whl → 1.12.10__py3-none-any.whl
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/_cli/definitions.py +1 -1
- dagster/_core/asset_graph_view/asset_graph_view.py +8 -9
- dagster/_core/captured_log_api.py +6 -3
- dagster/_core/definitions/assets/graph/asset_graph_subset.py +5 -36
- dagster/_core/definitions/assets/graph/base_asset_graph.py +14 -2
- dagster/_core/definitions/assets/graph/remote_asset_graph.py +43 -0
- dagster/_core/definitions/auto_materialize_rule_impls.py +12 -7
- dagster/_core/definitions/job_definition.py +4 -0
- dagster/_core/definitions/metadata/metadata_set.py +4 -0
- dagster/_core/definitions/partitions/definition/partitions_definition.py +3 -0
- dagster/_core/definitions/partitions/definition/time_window.py +15 -0
- dagster/_core/definitions/reconstruct.py +1 -1
- dagster/_core/definitions/repository_definition/repository_definition.py +1 -1
- dagster/_core/execution/api.py +1 -1
- dagster/_core/execution/asset_backfill.py +33 -11
- dagster/_core/execution/context/op_execution_context.py +14 -0
- dagster/_core/executor/base.py +2 -2
- dagster/_core/executor/multiprocess.py +2 -2
- dagster/_core/executor/step_delegating/step_delegating_executor.py +9 -13
- dagster/_core/instance/instance.py +1 -1
- dagster/_core/instance/runs/run_domain.py +10 -0
- dagster/_core/selector/subset_selector.py +3 -3
- dagster/_core/snap/node.py +22 -10
- dagster/_core/storage/alembic/versions/29b539ebc72a_use_longtext_on_bulk_actions_body_in_.py +46 -0
- dagster/_core/storage/alembic/versions/f495c27d5019_use_longtext_on_asset_keys_cached_.py +46 -0
- dagster/_core/storage/event_log/schema.py +1 -1
- dagster/_core/storage/runs/schema.py +1 -1
- dagster/_core/storage/tags.py +2 -0
- dagster/_core/storage/upath_io_manager.py +1 -1
- dagster/_generate/download.py +2 -0
- dagster/version.py +1 -1
- {dagster-1.12.8.dist-info → dagster-1.12.10.dist-info}/METADATA +5 -4
- {dagster-1.12.8.dist-info → dagster-1.12.10.dist-info}/RECORD +37 -35
- {dagster-1.12.8.dist-info → dagster-1.12.10.dist-info}/WHEEL +0 -0
- {dagster-1.12.8.dist-info → dagster-1.12.10.dist-info}/entry_points.txt +0 -0
- {dagster-1.12.8.dist-info → dagster-1.12.10.dist-info}/licenses/LICENSE +0 -0
- {dagster-1.12.8.dist-info → dagster-1.12.10.dist-info}/top_level.txt +0 -0
dagster/_cli/definitions.py
CHANGED
|
@@ -139,7 +139,7 @@ def definitions_validate_command_impl(
|
|
|
139
139
|
logger.info(f"Validation successful for code location {code_location}.")
|
|
140
140
|
|
|
141
141
|
try:
|
|
142
|
-
workspace.asset_graph.
|
|
142
|
+
workspace.asset_graph.validate_partitions()
|
|
143
143
|
except Exception:
|
|
144
144
|
logger.error(
|
|
145
145
|
f"Asset graph contained an invalid partition mapping:\n{serializable_error_info_from_exc_info(sys.exc_info()).to_string()}"
|
|
@@ -238,9 +238,12 @@ class AssetGraphView(LoadingContext):
|
|
|
238
238
|
self.asset_graph.has(key), f"Asset graph does not contain {key.to_user_string()}"
|
|
239
239
|
)
|
|
240
240
|
|
|
241
|
-
serializable_subset =
|
|
242
|
-
|
|
243
|
-
|
|
241
|
+
serializable_subset = asset_graph_subset.get_asset_subset(key)
|
|
242
|
+
|
|
243
|
+
if not serializable_subset:
|
|
244
|
+
return self.get_empty_subset(key=key)
|
|
245
|
+
|
|
246
|
+
serializable_subset = self._with_current_partitions_def(serializable_subset)
|
|
244
247
|
|
|
245
248
|
return EntitySubset(
|
|
246
249
|
self, key=key, value=_ValidatedEntitySubsetValue(serializable_subset.value)
|
|
@@ -626,12 +629,8 @@ class AssetGraphView(LoadingContext):
|
|
|
626
629
|
async def _compute_backfill_in_progress_asset_subset(
|
|
627
630
|
self, key: AssetKey
|
|
628
631
|
) -> EntitySubset[AssetKey]:
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
.get_asset_subset(asset_key=key, asset_graph=self.asset_graph)
|
|
632
|
-
.value
|
|
633
|
-
)
|
|
634
|
-
return EntitySubset(self, key=key, value=_ValidatedEntitySubsetValue(value))
|
|
632
|
+
asset_graph_subset = self._queryer.get_active_backfill_in_progress_asset_graph_subset()
|
|
633
|
+
return self.get_entity_subset_from_asset_graph_subset(asset_graph_subset, key)
|
|
635
634
|
|
|
636
635
|
async def _compute_execution_failed_unpartitioned(self, key: AssetKey) -> bool:
|
|
637
636
|
from dagster._core.event_api import AssetRecordsFilter
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import base64
|
|
2
2
|
from collections.abc import Sequence
|
|
3
|
-
from typing import NamedTuple
|
|
4
3
|
|
|
4
|
+
from dagster_shared.record import record
|
|
5
5
|
from dagster_shared.seven import json
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
@record
|
|
9
|
+
class LogLineCursor:
|
|
9
10
|
"""Representation of a log line cursor, to keep track of the place in the logs.
|
|
10
11
|
The captured logs are stored in multiple files in the same direcotry. The cursor keeps
|
|
11
12
|
track of the file name and the number of lines read so far.
|
|
@@ -36,4 +37,6 @@ class LogLineCursor(NamedTuple):
|
|
|
36
37
|
@staticmethod
|
|
37
38
|
def parse(cursor_str: str) -> "LogLineCursor":
|
|
38
39
|
raw = json.loads(base64.b64decode(cursor_str).decode("utf-8"))
|
|
39
|
-
return LogLineCursor(
|
|
40
|
+
return LogLineCursor(
|
|
41
|
+
log_key=raw["log_key"], line=raw["line"], has_more_now=raw["has_more_now"]
|
|
42
|
+
)
|
|
@@ -67,9 +67,7 @@ class AssetGraphSubset(NamedTuple):
|
|
|
67
67
|
def is_empty(self) -> bool:
|
|
68
68
|
return len(self.asset_keys) == 0
|
|
69
69
|
|
|
70
|
-
def
|
|
71
|
-
self, asset_key: AssetKey
|
|
72
|
-
) -> SerializableEntitySubset[AssetKey]:
|
|
70
|
+
def get_asset_subset(self, asset_key: AssetKey) -> Optional[SerializableEntitySubset[AssetKey]]:
|
|
73
71
|
if asset_key in self.non_partitioned_asset_keys:
|
|
74
72
|
return SerializableEntitySubset(key=asset_key, value=True)
|
|
75
73
|
elif asset_key in self.partitions_subsets_by_asset_key:
|
|
@@ -77,39 +75,10 @@ class AssetGraphSubset(NamedTuple):
|
|
|
77
75
|
key=asset_key, value=self.partitions_subsets_by_asset_key[asset_key]
|
|
78
76
|
)
|
|
79
77
|
else:
|
|
80
|
-
|
|
78
|
+
return None
|
|
81
79
|
|
|
82
|
-
def
|
|
83
|
-
self
|
|
84
|
-
) -> SerializableEntitySubset[AssetKey]:
|
|
85
|
-
"""Returns an AssetSubset representing the subset of a specific asset that this
|
|
86
|
-
AssetGraphSubset contains.
|
|
87
|
-
"""
|
|
88
|
-
if (
|
|
89
|
-
asset_key in self.non_partitioned_asset_keys
|
|
90
|
-
or asset_key in self.partitions_subsets_by_asset_key
|
|
91
|
-
):
|
|
92
|
-
return self._get_serializable_entity_subset(asset_key)
|
|
93
|
-
else:
|
|
94
|
-
partitions_def = asset_graph.get(asset_key).partitions_def
|
|
95
|
-
return SerializableEntitySubset(
|
|
96
|
-
key=asset_key,
|
|
97
|
-
value=partitions_def.empty_subset() if partitions_def else False,
|
|
98
|
-
)
|
|
99
|
-
|
|
100
|
-
def get_partitions_subset(
|
|
101
|
-
self, asset_key: AssetKey, asset_graph: Optional[BaseAssetGraph] = None
|
|
102
|
-
) -> PartitionsSubset:
|
|
103
|
-
if asset_graph:
|
|
104
|
-
partitions_def = asset_graph.get(asset_key).partitions_def
|
|
105
|
-
if partitions_def is None:
|
|
106
|
-
check.failed("Can only call get_partitions_subset on a partitioned asset")
|
|
107
|
-
|
|
108
|
-
return self.partitions_subsets_by_asset_key.get(
|
|
109
|
-
asset_key, partitions_def.empty_subset()
|
|
110
|
-
)
|
|
111
|
-
else:
|
|
112
|
-
return self.partitions_subsets_by_asset_key[asset_key]
|
|
80
|
+
def get_partitions_subset(self, asset_key: AssetKey) -> PartitionsSubset:
|
|
81
|
+
return self.partitions_subsets_by_asset_key[asset_key]
|
|
113
82
|
|
|
114
83
|
def iterate_asset_partitions(self) -> Iterable[AssetKeyPartitionKey]:
|
|
115
84
|
for (
|
|
@@ -127,7 +96,7 @@ class AssetGraphSubset(NamedTuple):
|
|
|
127
96
|
AssetGraphSubset contains.
|
|
128
97
|
"""
|
|
129
98
|
for asset_key in self.asset_keys:
|
|
130
|
-
yield self.
|
|
99
|
+
yield check.not_none(self.get_asset_subset(asset_key))
|
|
131
100
|
|
|
132
101
|
def __contains__(self, asset: Union[AssetKey, AssetKeyPartitionKey]) -> bool: # pyright: ignore[reportIncompatibleMethodOverride]
|
|
133
102
|
"""If asset is an AssetKeyPartitionKey, check if the given AssetKeyPartitionKey is in the
|
|
@@ -638,11 +638,19 @@ class BaseAssetGraph(ABC, Generic[T_AssetNode]):
|
|
|
638
638
|
and not self.has_materializable_parents(key)
|
|
639
639
|
}
|
|
640
640
|
|
|
641
|
-
def
|
|
641
|
+
def validate_partitions(self):
|
|
642
642
|
for node in self.asset_nodes:
|
|
643
643
|
if node.is_external:
|
|
644
644
|
continue
|
|
645
645
|
|
|
646
|
+
if node.partitions_def:
|
|
647
|
+
try:
|
|
648
|
+
node.partitions_def.validate_partition_definition()
|
|
649
|
+
except Exception as e:
|
|
650
|
+
raise DagsterInvalidDefinitionError(
|
|
651
|
+
f"Invalid partition definition for {node.key.to_user_string()}"
|
|
652
|
+
) from e
|
|
653
|
+
|
|
646
654
|
parents = self.get_parents(node)
|
|
647
655
|
for parent in parents:
|
|
648
656
|
if parent.partitions_def is None or parent.is_external:
|
|
@@ -738,7 +746,11 @@ class BaseAssetGraph(ABC, Generic[T_AssetNode]):
|
|
|
738
746
|
|
|
739
747
|
queued_subsets_by_asset_key: dict[AssetKey, Optional[PartitionsSubset]] = {
|
|
740
748
|
initial_asset_key: (
|
|
741
|
-
|
|
749
|
+
(
|
|
750
|
+
initial_subset.get_partitions_subset(initial_asset_key)
|
|
751
|
+
if initial_asset_key in initial_subset.partitions_subsets_by_asset_key
|
|
752
|
+
else check.not_none(self.get(initial_asset_key).partitions_def).empty_subset()
|
|
753
|
+
)
|
|
742
754
|
if self.get(initial_asset_key).is_partitioned
|
|
743
755
|
else None
|
|
744
756
|
),
|
|
@@ -514,6 +514,49 @@ class RemoteAssetGraph(BaseAssetGraph[TRemoteAssetNode], ABC, Generic[TRemoteAss
|
|
|
514
514
|
def get_checks_for_asset(self, asset_key: AssetKey) -> Sequence[RemoteAssetCheckNode]:
|
|
515
515
|
return self._asset_check_nodes_by_asset_key.get(asset_key, [])
|
|
516
516
|
|
|
517
|
+
@cached_property
|
|
518
|
+
def _asset_keys_by_normalized_table_name(self) -> Mapping[str, AbstractSet[AssetKey]]:
|
|
519
|
+
from dagster._core.definitions.metadata.metadata_set import TableMetadataSet
|
|
520
|
+
|
|
521
|
+
by_table_name = defaultdict(set)
|
|
522
|
+
for node in self.asset_nodes:
|
|
523
|
+
normalized_table_name = TableMetadataSet.extract(node.metadata).normalized_table_name
|
|
524
|
+
if normalized_table_name:
|
|
525
|
+
by_table_name[normalized_table_name.lower()].add(node.key)
|
|
526
|
+
|
|
527
|
+
return by_table_name
|
|
528
|
+
|
|
529
|
+
def get_assets_for_same_storage_address(
|
|
530
|
+
self, asset_key: AssetKey
|
|
531
|
+
) -> AbstractSet[TRemoteAssetNode]:
|
|
532
|
+
"""Returns all asset keys that have the same dagster/table_name metadata as the given asset key.
|
|
533
|
+
|
|
534
|
+
Comparison is case-insensitive, so 'DB.SCHEMA.TABLE' matches 'db.schema.table'.
|
|
535
|
+
|
|
536
|
+
Args:
|
|
537
|
+
asset_key: The asset key to find matching table assets for.
|
|
538
|
+
|
|
539
|
+
Returns:
|
|
540
|
+
A set of asset nodes (excluding the node for the input key) that share the same
|
|
541
|
+
table_name metadata.
|
|
542
|
+
Returns an empty set if the asset has no table_name metadata.
|
|
543
|
+
"""
|
|
544
|
+
if not self.has(asset_key):
|
|
545
|
+
return set()
|
|
546
|
+
|
|
547
|
+
from dagster._core.definitions.metadata.metadata_set import TableMetadataSet
|
|
548
|
+
|
|
549
|
+
input_node = self.get(asset_key)
|
|
550
|
+
input_table_name = TableMetadataSet.extract(input_node.metadata).normalized_table_name
|
|
551
|
+
|
|
552
|
+
if not input_table_name:
|
|
553
|
+
return set()
|
|
554
|
+
|
|
555
|
+
return {
|
|
556
|
+
self.get(key)
|
|
557
|
+
for key in self._asset_keys_by_normalized_table_name[input_table_name] - {asset_key}
|
|
558
|
+
}
|
|
559
|
+
|
|
517
560
|
def get_check_keys_for_assets(
|
|
518
561
|
self, asset_keys: AbstractSet[AssetKey]
|
|
519
562
|
) -> AbstractSet[AssetCheckKey]:
|
|
@@ -1056,14 +1056,19 @@ class SkipOnBackfillInProgressRule(
|
|
|
1056
1056
|
AutomationResult,
|
|
1057
1057
|
)
|
|
1058
1058
|
|
|
1059
|
+
# this backfilling subset is aware of the current partitions definitions, and so will
|
|
1060
|
+
# be valid
|
|
1061
|
+
asset_subset = (
|
|
1062
|
+
context.legacy_context.instance_queryer.get_active_backfill_target_asset_graph_subset().get_asset_subset(
|
|
1063
|
+
context.legacy_context.asset_key
|
|
1064
|
+
)
|
|
1065
|
+
or context.asset_graph_view.get_empty_subset(
|
|
1066
|
+
key=context.legacy_context.asset_key
|
|
1067
|
+
).convert_to_serializable_subset()
|
|
1068
|
+
)
|
|
1069
|
+
|
|
1059
1070
|
backfilling_subset = ValidAssetSubset.coerce_from_subset(
|
|
1060
|
-
|
|
1061
|
-
# be valid
|
|
1062
|
-
(
|
|
1063
|
-
context.legacy_context.instance_queryer.get_active_backfill_target_asset_graph_subset()
|
|
1064
|
-
).get_asset_subset(
|
|
1065
|
-
context.legacy_context.asset_key, context.legacy_context.asset_graph
|
|
1066
|
-
),
|
|
1071
|
+
asset_subset,
|
|
1067
1072
|
context.legacy_context.partitions_def,
|
|
1068
1073
|
)
|
|
1069
1074
|
|
|
@@ -828,6 +828,10 @@ class JobDefinition(IHasInternalInit):
|
|
|
828
828
|
asset_selection=frozenset(asset_selection) if asset_selection else None,
|
|
829
829
|
)
|
|
830
830
|
|
|
831
|
+
@property
|
|
832
|
+
def is_asset_job(self) -> bool:
|
|
833
|
+
return bool(self.asset_layer and self.asset_layer.selected_asset_keys)
|
|
834
|
+
|
|
831
835
|
def _get_partitions_def(
|
|
832
836
|
self, selected_asset_keys: Optional[Iterable[AssetKey]]
|
|
833
837
|
) -> PartitionsDefinition:
|
|
@@ -197,6 +197,10 @@ class TableMetadataSet(NamespacedMetadataSet):
|
|
|
197
197
|
def current_key_by_legacy_key(cls) -> Mapping[str, str]:
|
|
198
198
|
return {"relation_identifier": "table_name"}
|
|
199
199
|
|
|
200
|
+
@property
|
|
201
|
+
def normalized_table_name(self) -> Optional[str]:
|
|
202
|
+
return self.table_name.lower() if self.table_name else None
|
|
203
|
+
|
|
200
204
|
|
|
201
205
|
class UriMetadataSet(NamespacedMetadataSet):
|
|
202
206
|
"""Metadata entry which supplies a URI address for an asset.
|
|
@@ -196,6 +196,21 @@ class TimeWindowPartitionsDefinition(PartitionsDefinition, IHaveNew):
|
|
|
196
196
|
exclusions=cleaned_exclusions if cleaned_exclusions else None,
|
|
197
197
|
)
|
|
198
198
|
|
|
199
|
+
def validate_partition_definition(self) -> None:
|
|
200
|
+
# Try to determine if there are multiple time ranges being mapped
|
|
201
|
+
# to the same partition key.
|
|
202
|
+
first_partition_key = self.get_first_partition_key()
|
|
203
|
+
|
|
204
|
+
if first_partition_key is None:
|
|
205
|
+
return
|
|
206
|
+
|
|
207
|
+
if self.get_next_partition_key(first_partition_key) == first_partition_key:
|
|
208
|
+
raise DagsterInvalidDefinitionError(
|
|
209
|
+
"This partition set contains multiple time ranges that map to the same partition key. "
|
|
210
|
+
f"This usually indicates that the partition set's format string ({self.fmt}) is "
|
|
211
|
+
f"not granular enough to produce a unique key for each time in the cron schedule ({self.cron_schedule})."
|
|
212
|
+
)
|
|
213
|
+
|
|
199
214
|
@property
|
|
200
215
|
def start_timestamp(self) -> float:
|
|
201
216
|
return self.start_ts.timestamp
|
|
@@ -392,7 +392,7 @@ def reconstructable(target: Callable[..., "JobDefinition"]) -> ReconstructableJo
|
|
|
392
392
|
"``GraphDefinition.to_job``, you must wrap the ``to_job`` call in a function at "
|
|
393
393
|
"module scope, ie not within any other functions. "
|
|
394
394
|
"To learn more, check out the docs on ``reconstructable``: "
|
|
395
|
-
"https://docs.dagster.io/api/
|
|
395
|
+
"https://docs.dagster.io/api/dagster/execution#dagster.reconstructable"
|
|
396
396
|
)
|
|
397
397
|
raise DagsterInvariantViolationError(
|
|
398
398
|
"Reconstructable target should be a function or definition produced "
|
dagster/_core/execution/api.py
CHANGED
|
@@ -190,7 +190,7 @@ def execute_run(
|
|
|
190
190
|
"execute_run requires a reconstructable job but received job definition directly"
|
|
191
191
|
" instead. To support hand-off to other processes please wrap your definition in a call"
|
|
192
192
|
" to reconstructable(). Learn more about reconstructable here:"
|
|
193
|
-
" https://docs.dagster.io/api/
|
|
193
|
+
" https://docs.dagster.io/api/dagster/execution#dagster.reconstructable"
|
|
194
194
|
)
|
|
195
195
|
|
|
196
196
|
check.inst_param(job, "job", IJob)
|
|
@@ -331,12 +331,18 @@ class AssetBackfillData(NamedTuple):
|
|
|
331
331
|
|
|
332
332
|
Orders keys in the same topological level alphabetically.
|
|
333
333
|
"""
|
|
334
|
-
nodes: list[BaseAssetNode] = [
|
|
334
|
+
nodes: list[BaseAssetNode] = [
|
|
335
|
+
asset_graph.get(key) for key in self.target_subset.asset_keys if asset_graph.has(key)
|
|
336
|
+
]
|
|
335
337
|
return [
|
|
336
338
|
item
|
|
337
339
|
for items_by_level in toposort({node.key: node.parent_keys for node in nodes})
|
|
338
340
|
for item in sorted(items_by_level)
|
|
339
341
|
if item in self.target_subset.asset_keys
|
|
342
|
+
] + [
|
|
343
|
+
asset_key
|
|
344
|
+
for asset_key in self.target_subset.asset_keys
|
|
345
|
+
if not asset_graph.has(asset_key)
|
|
340
346
|
]
|
|
341
347
|
|
|
342
348
|
def get_backfill_status_per_asset_key(
|
|
@@ -350,15 +356,23 @@ class AssetBackfillData(NamedTuple):
|
|
|
350
356
|
def _get_status_for_asset_key(
|
|
351
357
|
asset_key: AssetKey,
|
|
352
358
|
) -> Union[PartitionedAssetBackfillStatus, UnpartitionedAssetBackfillStatus]:
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
359
|
+
target_subset = check.not_none(self.target_subset.get_asset_subset(asset_key))
|
|
360
|
+
|
|
361
|
+
if target_subset.is_partitioned:
|
|
362
|
+
materialized_subset = (
|
|
363
|
+
self.materialized_subset.get_partitions_subset(asset_key)
|
|
364
|
+
if asset_key in self.materialized_subset.asset_keys
|
|
365
|
+
else target_subset.subset_value.empty_subset()
|
|
356
366
|
)
|
|
357
|
-
failed_subset =
|
|
358
|
-
asset_key
|
|
367
|
+
failed_subset = (
|
|
368
|
+
self.failed_and_downstream_subset.get_partitions_subset(asset_key)
|
|
369
|
+
if asset_key in self.failed_and_downstream_subset.asset_keys
|
|
370
|
+
else target_subset.subset_value.empty_subset()
|
|
359
371
|
)
|
|
360
|
-
requested_subset =
|
|
361
|
-
asset_key
|
|
372
|
+
requested_subset = (
|
|
373
|
+
self.requested_subset.get_partitions_subset(asset_key)
|
|
374
|
+
if asset_key in self.requested_subset.asset_keys
|
|
375
|
+
else target_subset.subset_value.empty_subset()
|
|
362
376
|
)
|
|
363
377
|
|
|
364
378
|
# The failed subset includes partitions that failed and their downstream partitions.
|
|
@@ -371,7 +385,7 @@ class AssetBackfillData(NamedTuple):
|
|
|
371
385
|
|
|
372
386
|
return PartitionedAssetBackfillStatus(
|
|
373
387
|
asset_key,
|
|
374
|
-
len(self.target_subset.get_partitions_subset(asset_key
|
|
388
|
+
len(self.target_subset.get_partitions_subset(asset_key)),
|
|
375
389
|
{
|
|
376
390
|
AssetBackfillStatus.MATERIALIZED: len(materialized_subset),
|
|
377
391
|
AssetBackfillStatus.FAILED: len(failed_subset - materialized_subset),
|
|
@@ -1961,8 +1975,16 @@ def _get_cant_run_because_of_parent_reason(
|
|
|
1961
1975
|
if parent_node.partitions_def != candidate_node.partitions_def:
|
|
1962
1976
|
return f"parent {parent_node.key.to_user_string()} and {candidate_node.key.to_user_string()} have different partitions definitions so they cannot be materialized in the same run. {candidate_node.key.to_user_string()} can be materialized once {parent_node.key.to_user_string()} is materialized."
|
|
1963
1977
|
|
|
1964
|
-
parent_target_subset =
|
|
1965
|
-
|
|
1978
|
+
parent_target_subset = (
|
|
1979
|
+
target_subset.get_asset_subset(parent_asset_key)
|
|
1980
|
+
or asset_graph_view.get_empty_subset(key=parent_asset_key).convert_to_serializable_subset()
|
|
1981
|
+
)
|
|
1982
|
+
candidate_target_subset = (
|
|
1983
|
+
target_subset.get_asset_subset(candidate_asset_key)
|
|
1984
|
+
or asset_graph_view.get_empty_subset(
|
|
1985
|
+
key=candidate_asset_key
|
|
1986
|
+
).convert_to_serializable_subset()
|
|
1987
|
+
)
|
|
1966
1988
|
|
|
1967
1989
|
num_parent_partitions_being_requested_this_tick = parent_being_requested_this_tick_subset.size
|
|
1968
1990
|
|
|
@@ -183,6 +183,20 @@ class OpExecutionContext(AbstractComputeExecutionContext):
|
|
|
183
183
|
"""str: The id of the current execution's run."""
|
|
184
184
|
return self._step_execution_context.run_id
|
|
185
185
|
|
|
186
|
+
@public
|
|
187
|
+
@property
|
|
188
|
+
def location_name(self) -> Optional[str]:
|
|
189
|
+
"""Optional[str]: The name of the code location for this run.
|
|
190
|
+
|
|
191
|
+
This is the name of the code location (repository location) from which
|
|
192
|
+
the job/pipeline was loaded. Returns None if the job was not loaded from
|
|
193
|
+
a remote code location (e.g., in tests or when running locally without
|
|
194
|
+
a code location).
|
|
195
|
+
"""
|
|
196
|
+
if self.dagster_run and self.dagster_run.remote_job_origin:
|
|
197
|
+
return self.dagster_run.remote_job_origin.location_name
|
|
198
|
+
return None
|
|
199
|
+
|
|
186
200
|
@public
|
|
187
201
|
@property
|
|
188
202
|
def run_config(self) -> Mapping[str, object]:
|
dagster/_core/executor/base.py
CHANGED
|
@@ -79,12 +79,12 @@ class Executor(ABC):
|
|
|
79
79
|
else:
|
|
80
80
|
return original_event
|
|
81
81
|
|
|
82
|
-
def
|
|
82
|
+
def log_failure_or_retry_event_after_error(
|
|
83
83
|
self,
|
|
84
84
|
step_context: "IStepContext",
|
|
85
85
|
err_info: SerializableErrorInfo,
|
|
86
86
|
known_state: "KnownExecutionState",
|
|
87
|
-
):
|
|
87
|
+
) -> "DagsterEvent":
|
|
88
88
|
from dagster._core.events import DagsterEvent
|
|
89
89
|
|
|
90
90
|
# determine the retry policy for the step if needed
|
|
@@ -285,7 +285,7 @@ class MultiprocessExecutor(Executor):
|
|
|
285
285
|
)
|
|
286
286
|
|
|
287
287
|
failure_or_retry_event = (
|
|
288
|
-
self.
|
|
288
|
+
self.log_failure_or_retry_event_after_error(
|
|
289
289
|
step_context,
|
|
290
290
|
event_or_none.engine_event_data.error,
|
|
291
291
|
active_execution.get_known_state(),
|
|
@@ -309,7 +309,7 @@ class MultiprocessExecutor(Executor):
|
|
|
309
309
|
),
|
|
310
310
|
EngineEventData.engine_error(serializable_error),
|
|
311
311
|
)
|
|
312
|
-
failure_or_retry_event = self.
|
|
312
|
+
failure_or_retry_event = self.log_failure_or_retry_event_after_error(
|
|
313
313
|
step_context, serializable_error, active_execution.get_known_state()
|
|
314
314
|
)
|
|
315
315
|
|
|
@@ -13,7 +13,6 @@ from dagster._core.events import DagsterEvent, DagsterEventType, EngineEventData
|
|
|
13
13
|
from dagster._core.execution.context.system import PlanOrchestrationContext
|
|
14
14
|
from dagster._core.execution.plan.active import ActiveExecution
|
|
15
15
|
from dagster._core.execution.plan.instance_concurrency_context import InstanceConcurrencyContext
|
|
16
|
-
from dagster._core.execution.plan.objects import StepFailureData
|
|
17
16
|
from dagster._core.execution.plan.plan import ExecutionPlan
|
|
18
17
|
from dagster._core.execution.retries import RetryMode
|
|
19
18
|
from dagster._core.execution.step_dependency_config import StepDependencyConfig
|
|
@@ -319,7 +318,7 @@ class StepDelegatingExecutor(Executor):
|
|
|
319
318
|
assert isinstance(
|
|
320
319
|
dagster_event.engine_event_data.error, SerializableErrorInfo
|
|
321
320
|
)
|
|
322
|
-
self.
|
|
321
|
+
self.log_failure_or_retry_event_after_error(
|
|
323
322
|
step_context,
|
|
324
323
|
dagster_event.engine_event_data.error,
|
|
325
324
|
active_execution.get_known_state(),
|
|
@@ -363,23 +362,20 @@ class StepDelegatingExecutor(Executor):
|
|
|
363
362
|
cls_name=None,
|
|
364
363
|
)
|
|
365
364
|
|
|
366
|
-
self.
|
|
365
|
+
self.log_failure_or_retry_event_after_error(
|
|
367
366
|
step_context,
|
|
368
367
|
health_check_error,
|
|
369
368
|
active_execution.get_known_state(),
|
|
370
369
|
)
|
|
371
370
|
|
|
372
371
|
except Exception:
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
step_failure_data=StepFailureData(
|
|
381
|
-
error=serializable_error,
|
|
382
|
-
user_failure_data=None,
|
|
372
|
+
DagsterEvent.engine_event(
|
|
373
|
+
step_context,
|
|
374
|
+
f"Error while checking health for step {step.key}",
|
|
375
|
+
EngineEventData(
|
|
376
|
+
error=serializable_error_info_from_exc_info(
|
|
377
|
+
sys.exc_info()
|
|
378
|
+
)
|
|
383
379
|
),
|
|
384
380
|
)
|
|
385
381
|
|
|
@@ -89,7 +89,7 @@ class DagsterInstance(
|
|
|
89
89
|
For example, to use Postgres for dagster storage, you can write a ``dagster.yaml`` such as the
|
|
90
90
|
following:
|
|
91
91
|
|
|
92
|
-
.. literalinclude::
|
|
92
|
+
.. literalinclude:: ../../../../../examples/docs_snippets/docs_snippets/deploying/dagster-pg.yaml
|
|
93
93
|
:caption: dagster.yaml
|
|
94
94
|
:language: YAML
|
|
95
95
|
|
|
@@ -35,6 +35,7 @@ from dagster._core.storage.tags import (
|
|
|
35
35
|
ASSET_RESUME_RETRY_TAG,
|
|
36
36
|
BACKFILL_ID_TAG,
|
|
37
37
|
BACKFILL_TAGS,
|
|
38
|
+
CODE_LOCATION_TAG,
|
|
38
39
|
PARENT_RUN_ID_TAG,
|
|
39
40
|
PARTITION_NAME_TAG,
|
|
40
41
|
RESUME_RETRY_TAG,
|
|
@@ -222,6 +223,15 @@ class RunDomain:
|
|
|
222
223
|
"must include a remote job origin when creating a run using a remote asset graph",
|
|
223
224
|
)
|
|
224
225
|
|
|
226
|
+
# Add the code location tag to the validated tags
|
|
227
|
+
# This is useful for filtering runs by code location in the web server
|
|
228
|
+
# or control concurrency by code location with tag concurrency limits.
|
|
229
|
+
if remote_job_origin:
|
|
230
|
+
validated_tags = {
|
|
231
|
+
**validated_tags,
|
|
232
|
+
CODE_LOCATION_TAG: remote_job_origin.repository_origin.code_location_origin.location_name,
|
|
233
|
+
}
|
|
234
|
+
|
|
225
235
|
dagster_run = self.construct_run_with_snapshots(
|
|
226
236
|
job_name=job_name,
|
|
227
237
|
run_id=run_id, # type: ignore # (possible none)
|
|
@@ -237,12 +237,12 @@ def fetch_sources(
|
|
|
237
237
|
def has_upstream_within_selection(key: AssetKey) -> bool:
|
|
238
238
|
if key not in dp:
|
|
239
239
|
dp[key] = any(
|
|
240
|
-
|
|
241
|
-
for
|
|
240
|
+
parent_key in within_selection or has_upstream_within_selection(parent_key)
|
|
241
|
+
for parent_key in (graph.asset_dep_graph["upstream"][key] - {key})
|
|
242
242
|
)
|
|
243
243
|
return dp[key]
|
|
244
244
|
|
|
245
|
-
return {
|
|
245
|
+
return {key for key in within_selection if not has_upstream_within_selection(key)}
|
|
246
246
|
|
|
247
247
|
|
|
248
248
|
def fetch_connected_assets_definitions(
|
dagster/_core/snap/node.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from collections.abc import Mapping, Sequence, Set
|
|
2
|
-
from functools import cached_property
|
|
2
|
+
from functools import cached_property, partial
|
|
3
3
|
from typing import Optional, Union
|
|
4
4
|
|
|
5
5
|
import dagster._check as check
|
|
@@ -135,14 +135,21 @@ def build_input_def_snap(input_def: InputDefinition) -> InputDefSnap:
|
|
|
135
135
|
)
|
|
136
136
|
|
|
137
137
|
|
|
138
|
-
def build_output_def_snap(output_def: OutputDefinition) -> OutputDefSnap:
|
|
138
|
+
def build_output_def_snap(output_def: OutputDefinition, job_def: JobDefinition) -> OutputDefSnap:
|
|
139
139
|
check.inst_param(output_def, "output_def", OutputDefinition)
|
|
140
|
+
check.inst_param(job_def, "job_def", JobDefinition)
|
|
141
|
+
|
|
142
|
+
# Don't include verbose user-defined metadata(description/metadata fields) on the output
|
|
143
|
+
# definition snapshots for asset jobs, since they can be quite verbose/large and they
|
|
144
|
+
# map directly to information that is already available on the asset graph
|
|
145
|
+
include_verbose_metadata = not job_def.is_asset_job
|
|
146
|
+
|
|
140
147
|
return OutputDefSnap(
|
|
141
148
|
name=output_def.name,
|
|
142
149
|
dagster_type_key=output_def.dagster_type.key,
|
|
143
|
-
description=output_def.description,
|
|
150
|
+
description=output_def.description if include_verbose_metadata else None,
|
|
144
151
|
is_required=output_def.is_required,
|
|
145
|
-
metadata=output_def.metadata,
|
|
152
|
+
metadata=output_def.metadata if include_verbose_metadata else {},
|
|
146
153
|
is_dynamic=output_def.is_dynamic,
|
|
147
154
|
)
|
|
148
155
|
|
|
@@ -223,9 +230,9 @@ def build_node_defs_snapshot(job_def: JobDefinition) -> NodeDefsSnapshot:
|
|
|
223
230
|
graph_def_snaps = []
|
|
224
231
|
for node_def in job_def.all_node_defs:
|
|
225
232
|
if isinstance(node_def, OpDefinition):
|
|
226
|
-
op_def_snaps.append(build_op_def_snap(node_def))
|
|
233
|
+
op_def_snaps.append(build_op_def_snap(node_def, job_def))
|
|
227
234
|
elif isinstance(node_def, GraphDefinition):
|
|
228
|
-
graph_def_snaps.append(build_graph_def_snap(node_def))
|
|
235
|
+
graph_def_snaps.append(build_graph_def_snap(node_def, job_def))
|
|
229
236
|
else:
|
|
230
237
|
check.failed(f"Unexpected NodeDefinition type {node_def}")
|
|
231
238
|
|
|
@@ -250,12 +257,15 @@ def _by_name(
|
|
|
250
257
|
return snap.name
|
|
251
258
|
|
|
252
259
|
|
|
253
|
-
def build_graph_def_snap(graph_def: GraphDefinition) -> GraphDefSnap:
|
|
260
|
+
def build_graph_def_snap(graph_def: GraphDefinition, job_def: JobDefinition) -> GraphDefSnap:
|
|
254
261
|
check.inst_param(graph_def, "graph_def", GraphDefinition)
|
|
255
262
|
return GraphDefSnap(
|
|
256
263
|
name=graph_def.name,
|
|
257
264
|
input_def_snaps=sorted(map(build_input_def_snap, graph_def.input_defs), key=_by_name),
|
|
258
|
-
output_def_snaps=sorted(
|
|
265
|
+
output_def_snaps=sorted(
|
|
266
|
+
map(partial(build_output_def_snap, job_def=job_def), graph_def.output_defs),
|
|
267
|
+
key=_by_name,
|
|
268
|
+
),
|
|
259
269
|
description=graph_def.description,
|
|
260
270
|
tags=graph_def.tags,
|
|
261
271
|
config_field_snap=(
|
|
@@ -278,12 +288,14 @@ def build_graph_def_snap(graph_def: GraphDefinition) -> GraphDefSnap:
|
|
|
278
288
|
)
|
|
279
289
|
|
|
280
290
|
|
|
281
|
-
def build_op_def_snap(op_def: OpDefinition) -> OpDefSnap:
|
|
291
|
+
def build_op_def_snap(op_def: OpDefinition, job_def: JobDefinition) -> OpDefSnap:
|
|
282
292
|
check.inst_param(op_def, "op_def", OpDefinition)
|
|
283
293
|
return OpDefSnap(
|
|
284
294
|
name=op_def.name,
|
|
285
295
|
input_def_snaps=sorted(map(build_input_def_snap, op_def.input_defs), key=_by_name),
|
|
286
|
-
output_def_snaps=sorted(
|
|
296
|
+
output_def_snaps=sorted(
|
|
297
|
+
map(partial(build_output_def_snap, job_def=job_def), op_def.output_defs), key=_by_name
|
|
298
|
+
),
|
|
287
299
|
description=op_def.description,
|
|
288
300
|
tags=op_def.tags,
|
|
289
301
|
required_resource_keys=sorted(op_def.required_resource_keys),
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"""use longtext on bulk_actions.body in mysql
|
|
2
|
+
|
|
3
|
+
Revision ID: 29b539ebc72a
|
|
4
|
+
Revises: f495c27d5019
|
|
5
|
+
Create Date: 2026-01-06 07:02:58.437749
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
from alembic import op
|
|
11
|
+
from sqlalchemy import inspect
|
|
12
|
+
from sqlalchemy.dialects.mysql import LONGTEXT
|
|
13
|
+
|
|
14
|
+
# revision identifiers, used by Alembic.
|
|
15
|
+
revision = "29b539ebc72a"
|
|
16
|
+
down_revision = "f495c27d5019"
|
|
17
|
+
branch_labels = None
|
|
18
|
+
depends_on = None
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def upgrade():
|
|
22
|
+
inspector = inspect(op.get_bind())
|
|
23
|
+
if "mysql" not in inspector.dialect.dialect_description:
|
|
24
|
+
return
|
|
25
|
+
|
|
26
|
+
op.alter_column(
|
|
27
|
+
table_name="bulk_actions",
|
|
28
|
+
column_name="body",
|
|
29
|
+
nullable=True,
|
|
30
|
+
type_=sa.types.Text().with_variant(LONGTEXT, "mysql"),
|
|
31
|
+
existing_type=sa.types.Text(),
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def downgrade():
|
|
36
|
+
inspector = inspect(op.get_bind())
|
|
37
|
+
if "mysql" not in inspector.dialect.dialect_description:
|
|
38
|
+
return
|
|
39
|
+
|
|
40
|
+
op.alter_column(
|
|
41
|
+
table_name="bulk_actions",
|
|
42
|
+
column_name="body",
|
|
43
|
+
nullable=True,
|
|
44
|
+
type_=sa.types.Text(),
|
|
45
|
+
existing_type=sa.types.Text().with_variant(LONGTEXT, "mysql"),
|
|
46
|
+
)
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"""use longtext on asset_keys cached_status_data in mysql
|
|
2
|
+
|
|
3
|
+
Revision ID: f495c27d5019
|
|
4
|
+
Revises: 7e2f3204cf8e
|
|
5
|
+
Create Date: 2026-01-05 12:28:45.417971
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
from alembic import op
|
|
11
|
+
from sqlalchemy import inspect
|
|
12
|
+
from sqlalchemy.dialects.mysql import LONGTEXT
|
|
13
|
+
|
|
14
|
+
# revision identifiers, used by Alembic.
|
|
15
|
+
revision = "f495c27d5019"
|
|
16
|
+
down_revision = "7e2f3204cf8e"
|
|
17
|
+
branch_labels = None
|
|
18
|
+
depends_on = None
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def upgrade():
|
|
22
|
+
inspector = inspect(op.get_bind())
|
|
23
|
+
if "mysql" not in inspector.dialect.dialect_description:
|
|
24
|
+
return
|
|
25
|
+
|
|
26
|
+
op.alter_column(
|
|
27
|
+
table_name="asset_keys",
|
|
28
|
+
column_name="cached_status_data",
|
|
29
|
+
nullable=True,
|
|
30
|
+
type_=sa.types.Text().with_variant(LONGTEXT, "mysql"),
|
|
31
|
+
existing_type=sa.types.Text(),
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def downgrade():
|
|
36
|
+
inspector = inspect(op.get_bind())
|
|
37
|
+
if "mysql" not in inspector.dialect.dialect_description:
|
|
38
|
+
return
|
|
39
|
+
|
|
40
|
+
op.alter_column(
|
|
41
|
+
table_name="asset_keys",
|
|
42
|
+
column_name="cached_status_data",
|
|
43
|
+
nullable=True,
|
|
44
|
+
type_=sa.types.Text(),
|
|
45
|
+
existing_type=sa.types.Text().with_variant(LONGTEXT, "mysql"),
|
|
46
|
+
)
|
|
@@ -66,7 +66,7 @@ AssetKeyTable = db.Table(
|
|
|
66
66
|
), # guarded by secondary index check
|
|
67
67
|
db.Column("tags", db.TEXT), # guarded by secondary index check
|
|
68
68
|
db.Column("create_timestamp", db.DateTime, server_default=get_sql_current_timestamp()),
|
|
69
|
-
db.Column("cached_status_data",
|
|
69
|
+
db.Column("cached_status_data", MySQLCompatabilityTypes.LongText),
|
|
70
70
|
)
|
|
71
71
|
|
|
72
72
|
AssetEventTagsTable = db.Table(
|
|
@@ -118,7 +118,7 @@ BulkActionsTable = db.Table(
|
|
|
118
118
|
db.Column("key", db.String(32), unique=True, nullable=False),
|
|
119
119
|
db.Column("status", db.String(255), nullable=False),
|
|
120
120
|
db.Column("timestamp", db.types.TIMESTAMP, nullable=False),
|
|
121
|
-
db.Column("body",
|
|
121
|
+
db.Column("body", MySQLCompatabilityTypes.LongText),
|
|
122
122
|
db.Column("action_type", db.String(32)),
|
|
123
123
|
db.Column("selector_id", db.Text),
|
|
124
124
|
db.Column("job_name", db.Text, nullable=True),
|
dagster/_core/storage/tags.py
CHANGED
|
@@ -7,6 +7,8 @@ KIND_PREFIX = f"{SYSTEM_TAG_PREFIX}kind/"
|
|
|
7
7
|
|
|
8
8
|
REPOSITORY_LABEL_TAG = f"{HIDDEN_TAG_PREFIX}repository"
|
|
9
9
|
|
|
10
|
+
CODE_LOCATION_TAG = f"{SYSTEM_TAG_PREFIX}code_location"
|
|
11
|
+
|
|
10
12
|
SCHEDULE_NAME_TAG = f"{SYSTEM_TAG_PREFIX}schedule_name"
|
|
11
13
|
|
|
12
14
|
SENSOR_NAME_TAG = f"{SYSTEM_TAG_PREFIX}sensor_name"
|
dagster/_generate/download.py
CHANGED
|
@@ -30,6 +30,7 @@ AVAILABLE_EXAMPLES = [
|
|
|
30
30
|
"assets_pandas_pyspark",
|
|
31
31
|
"assets_pandas_type_metadata",
|
|
32
32
|
"assets_smoke_test",
|
|
33
|
+
"data-quality-patterns",
|
|
33
34
|
"deploy_docker",
|
|
34
35
|
"deploy_ecs",
|
|
35
36
|
"deploy_k8s",
|
|
@@ -37,6 +38,7 @@ AVAILABLE_EXAMPLES = [
|
|
|
37
38
|
"feature_graph_backed_assets",
|
|
38
39
|
"google_drive_factory",
|
|
39
40
|
"ingestion-patterns",
|
|
41
|
+
"project_databricks_and_snowflake",
|
|
40
42
|
"oss-metadata-to-plus",
|
|
41
43
|
"project_analytics",
|
|
42
44
|
"project_fully_featured",
|
dagster/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "1.12.
|
|
1
|
+
__version__ = "1.12.10"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dagster
|
|
3
|
-
Version: 1.12.
|
|
3
|
+
Version: 1.12.10
|
|
4
4
|
Summary: Dagster is an orchestration platform for the development, production, and observation of data assets.
|
|
5
5
|
Author: Dagster Labs
|
|
6
6
|
Author-email: hello@dagsterlabs.com
|
|
@@ -24,11 +24,12 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
24
24
|
Classifier: Programming Language :: Python :: 3.11
|
|
25
25
|
Classifier: Programming Language :: Python :: 3.12
|
|
26
26
|
Classifier: Programming Language :: Python :: 3.13
|
|
27
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
27
28
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
28
29
|
Classifier: Topic :: System :: Monitoring
|
|
29
30
|
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
30
31
|
Classifier: Operating System :: OS Independent
|
|
31
|
-
Requires-Python: >=3.10,<3.
|
|
32
|
+
Requires-Python: >=3.10,<3.15
|
|
32
33
|
Description-Content-Type: text/markdown
|
|
33
34
|
License-File: LICENSE
|
|
34
35
|
Requires-Dist: click<9.0,>=5.0
|
|
@@ -59,8 +60,8 @@ Requires-Dist: universal_pathlib; python_version < "3.12"
|
|
|
59
60
|
Requires-Dist: universal_pathlib>=0.2.0; python_version >= "3.12"
|
|
60
61
|
Requires-Dist: rich
|
|
61
62
|
Requires-Dist: filelock
|
|
62
|
-
Requires-Dist: dagster-pipes==1.12.
|
|
63
|
-
Requires-Dist: dagster-shared==1.12.
|
|
63
|
+
Requires-Dist: dagster-pipes==1.12.10
|
|
64
|
+
Requires-Dist: dagster-shared==1.12.10
|
|
64
65
|
Requires-Dist: antlr4-python3-runtime
|
|
65
66
|
Provides-Extra: docker
|
|
66
67
|
Requires-Dist: docker; extra == "docker"
|
|
@@ -4,7 +4,7 @@ dagster/_annotations.py,sha256=GC7Rc8ZJZS9EpUuiCMyrtLZ5lsGGjPPkVtlmaClkt2o,1610
|
|
|
4
4
|
dagster/_builtins.py,sha256=J6A1CE28JV0itz73hCaHIKoUknb1j5B3QO5Frx_hQuU,471
|
|
5
5
|
dagster/_module_alias_map.py,sha256=KsLPXRga52UbPcEjFpOie8tvb7sGdNnikl3MUelYtVA,3349
|
|
6
6
|
dagster/py.typed,sha256=la67KBlbjXN-_-DfGNcdOcjYumVpKG_Tkw-8n5dnGB4,8
|
|
7
|
-
dagster/version.py,sha256=
|
|
7
|
+
dagster/version.py,sha256=GX6pK-MXEc7Qkjz8JfsyRXF34LXYUDbzbFGeDjwSQ5c,24
|
|
8
8
|
dagster/_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
9
|
dagster/_api/get_server_id.py,sha256=sBjhjcHgB__iIN567QCJmTtBK6-v31VfjDsYNZIohVw,731
|
|
10
10
|
dagster/_api/list_repositories.py,sha256=fbjMobgFKzwoMN825GEgDeCx1jzUlW2vPhPDuYIg93g,3905
|
|
@@ -22,7 +22,7 @@ dagster/_cli/asset.py,sha256=Q8ktHz8j-9iJm9qnb6f4HOL0KTvGFH5X9J-KDIEGG-M,12751
|
|
|
22
22
|
dagster/_cli/code_server.py,sha256=9__r3D8b9OnWAuG1-L_v6rCIkJDSPo-x0sLBH5c30hE,10399
|
|
23
23
|
dagster/_cli/config_scaffolder.py,sha256=D3JYF_8u1mSgaYqrV_LHIDFoGrrP2UUNuJXZtegkGYk,2374
|
|
24
24
|
dagster/_cli/debug.py,sha256=ub8kEXDpnysokKUY_khPLYjLV-AKc4Sr4J3xIfznxJA,3400
|
|
25
|
-
dagster/_cli/definitions.py,sha256=
|
|
25
|
+
dagster/_cli/definitions.py,sha256=0YR3-hbtg1cg36YK-xoYvJlEpGPZ-9G3E4885R-R_S4,5395
|
|
26
26
|
dagster/_cli/dev.py,sha256=spRTstgbAUy8raECbSfKfSCwR3VUgNwJ1L9JzrKArKQ,12399
|
|
27
27
|
dagster/_cli/instance.py,sha256=CSxsaPPRMT2TgGQw4abdLeO1kMX5oZ5lxqfdlYMrD7Q,6687
|
|
28
28
|
dagster/_cli/job.py,sha256=bfhM2Nb5VO4ickm5tlWktjLQ9nOImY7HJ5a-Ec9ImRE,35600
|
|
@@ -59,7 +59,7 @@ dagster/_config/pythonic_config/type_check_utils.py,sha256=K75S_1CGFf5KFAoxDbChN
|
|
|
59
59
|
dagster/_config/pythonic_config/typing_utils.py,sha256=iph3bfIu2-ANo3pfuQZKOB3xj9mv3TYGVoBFzlmNrqE,10056
|
|
60
60
|
dagster/_core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
61
61
|
dagster/_core/assets.py,sha256=WJl_wtNmZPD0yPPsIPTWvaVhUVt8sE_EAts3dmE2g-s,983
|
|
62
|
-
dagster/_core/captured_log_api.py,sha256=
|
|
62
|
+
dagster/_core/captured_log_api.py,sha256=CKXR2vfHoKQhJTXDKCTk7OqQjbwGlWb7F5BvXdSFclA,1711
|
|
63
63
|
dagster/_core/code_pointer.py,sha256=LfgQ4IPenIK2DtyfvAH_qcOl36JYVg3rGtlaHNCPVmY,12424
|
|
64
64
|
dagster/_core/debug.py,sha256=_hzIFHGR58jTkFY84Awcxdw9WnOUKvlM7F20-Pk3kkQ,2301
|
|
65
65
|
dagster/_core/decorator_utils.py,sha256=X3c0O7XjBHho0ccbkKi7lVqS-zv2sAaBKOrlmcGZoZc,9724
|
|
@@ -79,7 +79,7 @@ dagster/_core/test_utils.py,sha256=xqnrQ5CLKSh5bmeLEXPCVoNoX0I3gyhy3VAnfvQ2PkE,2
|
|
|
79
79
|
dagster/_core/utility_ops.py,sha256=KtVCu9FquKD4AfXBHrRTeWSuRrz1kHta9ABRMC7ubTU,1468
|
|
80
80
|
dagster/_core/utils.py,sha256=0LtOF1ji14rhmlif1tARvsm7hokeioM5tavDBkCKTqc,8166
|
|
81
81
|
dagster/_core/asset_graph_view/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
82
|
-
dagster/_core/asset_graph_view/asset_graph_view.py,sha256=
|
|
82
|
+
dagster/_core/asset_graph_view/asset_graph_view.py,sha256=LlUQUvjNupyNdnAXgEiBgqrSWbw0B2gOy9JqEJ1EZMc,42021
|
|
83
83
|
dagster/_core/asset_graph_view/bfs.py,sha256=x1HRAiT7fN87ZfL4hdlEBNHvScXwGxNa1i4dHzR9gvg,8157
|
|
84
84
|
dagster/_core/asset_graph_view/entity_subset.py,sha256=VlvH2kR9Ov-eB4nOjyObd_Mq1WHb2YiG1St6bzlFBuc,5596
|
|
85
85
|
dagster/_core/asset_graph_view/serializable_entity_subset.py,sha256=kV9InWpbXsEACGwBIqizHxSWlU6XwNWsaaIPnAvBhAs,7358
|
|
@@ -93,7 +93,7 @@ dagster/_core/definitions/asset_sensor_definition.py,sha256=SN3iWp2G5ASosZ6jLHoe
|
|
|
93
93
|
dagster/_core/definitions/auto_materialize_policy.py,sha256=lezqPrjE8o8RbVIW8HrHEpXvIUTywOAIAZejxJ8OGjY,14363
|
|
94
94
|
dagster/_core/definitions/auto_materialize_rule.py,sha256=evG-F_vuwrHnFx-eYFFXhEgLA35JCUZtauN_K0--6Gw,11763
|
|
95
95
|
dagster/_core/definitions/auto_materialize_rule_evaluation.py,sha256=0INxDvF-skuAkqmtf-NTU0SCGrC6r0fmMOef_wD4XoA,5079
|
|
96
|
-
dagster/_core/definitions/auto_materialize_rule_impls.py,sha256=
|
|
96
|
+
dagster/_core/definitions/auto_materialize_rule_impls.py,sha256=ZpYf5LmlCFeTg6Ot3LFvsVvoH2AtYvonUZmXOgaik0Y,52015
|
|
97
97
|
dagster/_core/definitions/automation_condition_sensor_definition.py,sha256=lBeOBZ0eLXxHi47rrcfhU4VaANxiVQ0wEk5Vb-oV3x8,11505
|
|
98
98
|
dagster/_core/definitions/automation_tick_evaluation_context.py,sha256=5PpiUBNSnTy2IA6mNx6tPr-jXnkTqHEzdDduo3iczrw,22824
|
|
99
99
|
dagster/_core/definitions/backfill_policy.py,sha256=Ii9HasVaXWv5HKAR7d4uIJfwPqUJQApqCSBNHJfkclw,3987
|
|
@@ -121,7 +121,7 @@ dagster/_core/definitions/inference.py,sha256=WhvPqo4_AewcFlyrI5sG6gz-XiW0D6bPqF
|
|
|
121
121
|
dagster/_core/definitions/input.py,sha256=vwB-WtXZutQIePiA2vj-4mlsUiK4p-5guuY5_E0NmlI,21007
|
|
122
122
|
dagster/_core/definitions/instigation_logger.py,sha256=n0l2a7uWo6qlDB__zzONRNW-U6bnCuZeHxsV_kuIbX8,7396
|
|
123
123
|
dagster/_core/definitions/job_base.py,sha256=o5FBiqml5le14TAiDPxmYRLSoW4-_G0N2HzeXvakME8,4293
|
|
124
|
-
dagster/_core/definitions/job_definition.py,sha256=
|
|
124
|
+
dagster/_core/definitions/job_definition.py,sha256=Hmon_NOwLvRCKSqPkaqr0AVjjhcQBOCRUqHma0ZPxNQ,62303
|
|
125
125
|
dagster/_core/definitions/logger_definition.py,sha256=eBb-9xOOMRKJY43wv7rnQgb8pJG_W4lYKdE77nQvZNQ,7332
|
|
126
126
|
dagster/_core/definitions/logger_invocation.py,sha256=0kAkCu-oSa4hGqlPrjJFW9kXLpZWKO6wi-1L0txl5II,698
|
|
127
127
|
dagster/_core/definitions/materialize.py,sha256=1bls6kLDvUsWlJ_8lXjFlJiyljC4x7Y44YhmdsBAeT0,9430
|
|
@@ -135,7 +135,7 @@ dagster/_core/definitions/op_invocation.py,sha256=5YdGsAo8tfhCYXeatPzvgZ-Uo6h05Y
|
|
|
135
135
|
dagster/_core/definitions/op_selection.py,sha256=Q8cqYHny9BVLP_TgeRUBUA_ItwpMNa43u2bA0RgJQ30,8699
|
|
136
136
|
dagster/_core/definitions/output.py,sha256=6kXTThBhHqX3OZvQ-BjogxUkYbYv372-OmlbTbeJho8,19290
|
|
137
137
|
dagster/_core/definitions/policy.py,sha256=3Y-4ARYjNulq2ycCCg2z1flOAAInsD8IERQaZiMyT1s,3811
|
|
138
|
-
dagster/_core/definitions/reconstruct.py,sha256=
|
|
138
|
+
dagster/_core/definitions/reconstruct.py,sha256=ejHsKQl1bz1mhOhWsgRgjhdLShkk-V7GzNxhCKkqUWo,31874
|
|
139
139
|
dagster/_core/definitions/resolved_asset_deps.py,sha256=qIdsxz-5DiwRZdNg3hMF1-HeqcPNjq1DwlbR58sGWBU,10925
|
|
140
140
|
dagster/_core/definitions/resource_annotation.py,sha256=gdQW4v0hnKUFi6LXm2vgrZ3TXOJA2HJYXkLRu9B5-zc,1619
|
|
141
141
|
dagster/_core/definitions/resource_definition.py,sha256=AOOoltR3Jxgbns-V_LfYfmqgkC1YbFf3snwvGxlahLs,18048
|
|
@@ -194,9 +194,9 @@ dagster/_core/definitions/assets/definition/cacheable_assets_definition.py,sha25
|
|
|
194
194
|
dagster/_core/definitions/assets/graph/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
195
195
|
dagster/_core/definitions/assets/graph/asset_graph.py,sha256=7uC3IgCqjvVLlJ86G9Ko3woVm8ivS8qaIrTZyGFqK_I,13952
|
|
196
196
|
dagster/_core/definitions/assets/graph/asset_graph_differ.py,sha256=ZgyJa3tD-58a5y8SbU10jn60FHQECGA3-FrspkMPyyY,8338
|
|
197
|
-
dagster/_core/definitions/assets/graph/asset_graph_subset.py,sha256=
|
|
198
|
-
dagster/_core/definitions/assets/graph/base_asset_graph.py,sha256=
|
|
199
|
-
dagster/_core/definitions/assets/graph/remote_asset_graph.py,sha256=
|
|
197
|
+
dagster/_core/definitions/assets/graph/asset_graph_subset.py,sha256=T44B8C2_J1UdnjCv-wROZHbAqACbGag06QM6dvpVgoI,17374
|
|
198
|
+
dagster/_core/definitions/assets/graph/base_asset_graph.py,sha256=kCFBREioJyltAXCwIqbQYUC7QL9VZHn1zgwB54Gho4I,32842
|
|
199
|
+
dagster/_core/definitions/assets/graph/remote_asset_graph.py,sha256=vCeHFRqHRb9W3PPZ0M8Kxw0_L6gna0LzLyjr2Jy9Rik,35164
|
|
200
200
|
dagster/_core/definitions/assets/job/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
201
201
|
dagster/_core/definitions/assets/job/asset_in.py,sha256=c70Sx5_lH8C4aSRmOtL6mn2Jk18BFhpds-VWUcbMQBw,4065
|
|
202
202
|
dagster/_core/definitions/assets/job/asset_job.py,sha256=FgJzVfsfDYUU8bHvNcTooGn3ROOnolrnjcsch8Wuk3o,30964
|
|
@@ -241,7 +241,7 @@ dagster/_core/definitions/decorators/sensor_decorator.py,sha256=BaieF1GcKdaONu3O
|
|
|
241
241
|
dagster/_core/definitions/decorators/source_asset_decorator.py,sha256=KE9oCVlzaRNiUck_aP8n5vX7Ah8JQEOoXirwRW2E5YQ,14912
|
|
242
242
|
dagster/_core/definitions/metadata/__init__.py,sha256=3udptTJSppffelN6ehwrArbfpS-LFwHa9MqYArTJqiA,10784
|
|
243
243
|
dagster/_core/definitions/metadata/external_metadata.py,sha256=DphSm10HGxHACurNFhegFcAM8lOx67QePUsOyek6Yac,5040
|
|
244
|
-
dagster/_core/definitions/metadata/metadata_set.py,sha256=
|
|
244
|
+
dagster/_core/definitions/metadata/metadata_set.py,sha256=nfEyUYSqHxWvM1mVohodLfxcLxv23wqz0KNiTlWs2x8,7801
|
|
245
245
|
dagster/_core/definitions/metadata/metadata_value.py,sha256=vQdvYxfqWUWk7xe3sdNWmErTcyOx3iSJ7OSwuv-MJk8,33394
|
|
246
246
|
dagster/_core/definitions/metadata/source_code.py,sha256=sc21_k_eH7ZaUeTQMWF3XYrBtCa3-yGSy9_gTiE149s,16350
|
|
247
247
|
dagster/_core/definitions/metadata/table.py,sha256=PwXMIyKMn-eotPThhX6OPkyQqrealjs5KExo8WkTWU8,11097
|
|
@@ -260,9 +260,9 @@ dagster/_core/definitions/partitions/schedule_type.py,sha256=bSmF9ajRmBgo6GOm9LE
|
|
|
260
260
|
dagster/_core/definitions/partitions/definition/__init__.py,sha256=UMbtK90ym1dqFVw31sFDfUxzbBCJMIICYaBfty8cRJA,1016
|
|
261
261
|
dagster/_core/definitions/partitions/definition/dynamic.py,sha256=fUgdaIYaj_7avFoGzl6_YOUBrT3DX-crkF1ai_nLTMc,9271
|
|
262
262
|
dagster/_core/definitions/partitions/definition/multi.py,sha256=9UBAiW7IkxpHQwlRFepOkPwnEKksDbTYOqxdyAKBfyU,20326
|
|
263
|
-
dagster/_core/definitions/partitions/definition/partitions_definition.py,sha256=
|
|
263
|
+
dagster/_core/definitions/partitions/definition/partitions_definition.py,sha256=DndFn52CCxzeOhkH3qCS4T4i560pBnNlDvn2J3h6_jk,6933
|
|
264
264
|
dagster/_core/definitions/partitions/definition/static.py,sha256=XJG_2ZGixkLY79Aj2057G4ZAAQbXbi13TQEldxkqJdg,3799
|
|
265
|
-
dagster/_core/definitions/partitions/definition/time_window.py,sha256=
|
|
265
|
+
dagster/_core/definitions/partitions/definition/time_window.py,sha256=AxMMoSl9UthQJ6sjkNNPSlgBKqiuhH4ut0wDfk_SNUo,52058
|
|
266
266
|
dagster/_core/definitions/partitions/definition/time_window_subclasses.py,sha256=JuB1R2G77TnQMcuz3qKBCvqFDsBjQaZkdFCl8BFhnVY,16625
|
|
267
267
|
dagster/_core/definitions/partitions/mapping/__init__.py,sha256=c9ASNcN3xjCXAMXfFgW8dp5DM4qe7qu6b_A-J93IzsA,1435
|
|
268
268
|
dagster/_core/definitions/partitions/mapping/all.py,sha256=oZJgLQn9LLzEzaIYA5XGTNMt6IEmav_8THm-OBVXLV0,3335
|
|
@@ -299,7 +299,7 @@ dagster/_core/definitions/repository_definition/__init__.py,sha256=wMlAvbzGwInb6
|
|
|
299
299
|
dagster/_core/definitions/repository_definition/caching_index.py,sha256=fcSjlnpQl9aQUSkvTLl9S8cRvRtaV0L2fBRntR6M50k,6356
|
|
300
300
|
dagster/_core/definitions/repository_definition/repository_data.py,sha256=WQ5rMoNANoZ3foi57X-_ZuYMWPA3aEbK4qfci8WGbi0,22442
|
|
301
301
|
dagster/_core/definitions/repository_definition/repository_data_builder.py,sha256=_WUyaVtgr08LZiN9kZqLOViePakfjA5N9fdPKzt6nyc,25545
|
|
302
|
-
dagster/_core/definitions/repository_definition/repository_definition.py,sha256=
|
|
302
|
+
dagster/_core/definitions/repository_definition/repository_definition.py,sha256=8c0Rx2aJIS2hMc1bshLcpGQ_O4ojkFXw2GWoehhjYyU,17950
|
|
303
303
|
dagster/_core/definitions/repository_definition/valid_definitions.py,sha256=d02UZtYJrWk4fWDuJvK6PfyByM9kggeL40b2cTfuQpY,1624
|
|
304
304
|
dagster/_core/definitions/tags/__init__.py,sha256=DwmOAOmGGojK7DCC9Wcsyov7Mg4g9onmllRzURWIc48,501
|
|
305
305
|
dagster/_core/definitions/tags/tag_set.py,sha256=jvtLl4lP2q69dEyJzJuz097NiQYUwrjl9nHakiuJ4Eg,1946
|
|
@@ -307,8 +307,8 @@ dagster/_core/events/__init__.py,sha256=PnK29O4NvGBZVVDIgjRgzQ5GGGDvE7vjp1sEOpoW
|
|
|
307
307
|
dagster/_core/events/log.py,sha256=bPlxKl3FqD7IWSQ0A9vr047bv-LXJrLldXGCj1T2ro8,8155
|
|
308
308
|
dagster/_core/events/utils.py,sha256=jaimJ6URJeSCizthpOHC1z5P0DFhV1gnhBvqvXHsREw,1620
|
|
309
309
|
dagster/_core/execution/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
310
|
-
dagster/_core/execution/api.py,sha256=
|
|
311
|
-
dagster/_core/execution/asset_backfill.py,sha256=
|
|
310
|
+
dagster/_core/execution/api.py,sha256=jmpi-XBbm7WSj6c8cL8U3mbw3pdUhjtUQHMIuGOQKNY,39237
|
|
311
|
+
dagster/_core/execution/asset_backfill.py,sha256=skuURuv_mwb8Aj_OPWu64Ze90i2FOJilwx261Lb8imU,97848
|
|
312
312
|
dagster/_core/execution/backfill.py,sha256=tjwAL6MxRgH6su6WBR2rWNh63N822iYd_bAwrp5l4Bs,25419
|
|
313
313
|
dagster/_core/execution/build_resources.py,sha256=jQLPC2miYv-kXRpHf4V1jFzrUMf2X7CbYN0Qa8S3ew4,6686
|
|
314
314
|
dagster/_core/execution/bulk_actions.py,sha256=QhuivhWDehXBui5qteYe0FmgIYvZsjlJv27uScZjU5M,224
|
|
@@ -343,7 +343,7 @@ dagster/_core/execution/context/input.py,sha256=YU7lsQnE8YhEkE0hpeX9MQJm8vlSCB6d
|
|
|
343
343
|
dagster/_core/execution/context/invocation.py,sha256=qswshTEgBNpMGagsTx0RldTJk-Oxt3xh65ZipPayzOs,45559
|
|
344
344
|
dagster/_core/execution/context/logger.py,sha256=fNivic7By_w8yha2x8-FIFBsFW7t1kJP-CzpasbKuNw,3150
|
|
345
345
|
dagster/_core/execution/context/metadata_logging.py,sha256=AEPYHbQx8bVKDkEnZZrAYNShfiTp9TSLuTsvJpDiQOI,2511
|
|
346
|
-
dagster/_core/execution/context/op_execution_context.py,sha256=
|
|
346
|
+
dagster/_core/execution/context/op_execution_context.py,sha256=vSSissUnE1UKLrw-S6fTwaNOx0safH3oA5P0b9stSiQ,53865
|
|
347
347
|
dagster/_core/execution/context/output.py,sha256=fcOFEtcXB7tUiGnzTD3hwU9F4dGEpzC5aEBSjftVn94,37149
|
|
348
348
|
dagster/_core/execution/context/system.py,sha256=cey6BY-Ge4pOmNLvvW64hLK_evVJmdr9-jk2ni3Qlfs,55383
|
|
349
349
|
dagster/_core/execution/plan/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -368,19 +368,19 @@ dagster/_core/execution/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
|
|
|
368
368
|
dagster/_core/execution/scripts/poll_compute_logs.py,sha256=5yeqzKsNmDdy_VC33KkT9SswRqTmsYElsdYie9N8kqs,1757
|
|
369
369
|
dagster/_core/execution/scripts/watch_orphans.py,sha256=BXhrRP7j2WUk3WsrgXdxR84OaNOqLRG1FwQLEnWsrvs,1282
|
|
370
370
|
dagster/_core/executor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
371
|
-
dagster/_core/executor/base.py,sha256=
|
|
371
|
+
dagster/_core/executor/base.py,sha256=Mv8lnM8qeVpjTbyfAK_Awl5x8q8CBtIuUAqHXwXmHIU,4088
|
|
372
372
|
dagster/_core/executor/child_process_executor.py,sha256=xRF5B7VadGzHF_eAT-dDiR5HoaqtBTBthYeVhf7cUY8,5897
|
|
373
373
|
dagster/_core/executor/in_process.py,sha256=nh9lnjHZYuMqfRQ9dG9BWlhnOS_kKDvYP8nXb5LAAsk,4024
|
|
374
374
|
dagster/_core/executor/init.py,sha256=Sg1ZPhGcJbDWzm7-LgK19XvU1Dvx-vey4j_gZ1EhKdY,1522
|
|
375
|
-
dagster/_core/executor/multiprocess.py,sha256=
|
|
375
|
+
dagster/_core/executor/multiprocess.py,sha256=2vuiWoFdB0cPMoToerBFUveWk_Di_QRl0RdlsaQGHis,19353
|
|
376
376
|
dagster/_core/executor/step_delegating/__init__.py,sha256=X9x97D0C-_-38D9FsW5VspqfwL2gpojtB9vFgxnjB-4,332
|
|
377
|
-
dagster/_core/executor/step_delegating/step_delegating_executor.py,sha256=
|
|
377
|
+
dagster/_core/executor/step_delegating/step_delegating_executor.py,sha256=D1iHWqBaSrxRTYHwe8RpsPsspLS6AdHvL_M0I1ZrYew,21261
|
|
378
378
|
dagster/_core/executor/step_delegating/step_handler/__init__.py,sha256=7PQNv2M79kcBMra-vDMMTmHJ5PzZcxFdqGTUgHVgttc,203
|
|
379
379
|
dagster/_core/executor/step_delegating/step_handler/base.py,sha256=bz-1km5JyhlCPnmDZiHysluMizqgNvj1iQHfWHPUYSs,3079
|
|
380
380
|
dagster/_core/instance/__init__.py,sha256=6UHHmrlCY_tYggl1y5ZQ2vvZLRq99S1FSA4dEKJ235k,1293
|
|
381
381
|
dagster/_core/instance/config.py,sha256=0dq42eK_L8GbfvuGDIBGnSx0nOldtvlo8uQbuXaHtaA,26762
|
|
382
382
|
dagster/_core/instance/factory.py,sha256=P5faontUcLY025-sBBIwTYaRxSEeIxd9-XWwXqNhm9U,7606
|
|
383
|
-
dagster/_core/instance/instance.py,sha256=
|
|
383
|
+
dagster/_core/instance/instance.py,sha256=ztpEzVJ8Lm6wU0t5AyCsmB3Owt57B4_jHqmmG0HDSpA,39032
|
|
384
384
|
dagster/_core/instance/ref.py,sha256=GxVwoWbAUrVhSPL64KrYq4W5iTOf9l0jVMiYtoE9UII,25927
|
|
385
385
|
dagster/_core/instance/types.py,sha256=ghmEE-NgoaFW9d4xozJxTamWZH8XpBOw9m76Kd_xrBo,10018
|
|
386
386
|
dagster/_core/instance/utils.py,sha256=wR6K3qyfmYuTZlDFale6hiz8IbZwstuu3Lme7Sx5MQc,2999
|
|
@@ -395,7 +395,7 @@ dagster/_core/instance/methods/scheduling_methods.py,sha256=p8PYQIdRXVzxg5-U-c7I
|
|
|
395
395
|
dagster/_core/instance/methods/settings_methods.py,sha256=rARrVm00JGwBnz5av-UnDtABynTIjd2LuG8fCBeEbpo,8382
|
|
396
396
|
dagster/_core/instance/methods/storage_methods.py,sha256=84AFCeEsYj3Vk3CJfUxwnkZpfOZPM8GVYn8L22HKmcE,4288
|
|
397
397
|
dagster/_core/instance/runs/__init__.py,sha256=uRqAo-gjmsiICHb_qI7h9jKwLoGKBKu-2MLQw575RCQ,34
|
|
398
|
-
dagster/_core/instance/runs/run_domain.py,sha256=
|
|
398
|
+
dagster/_core/instance/runs/run_domain.py,sha256=3DYvyrimdP-qtlegMZMcIrZcZ1-93qa6IvZG_pPNpUw,47942
|
|
399
399
|
dagster/_core/instance/storage/__init__.py,sha256=kIhh24GXtt-sr9-OmpLjo8oxU9NKJFuuK59T21wrq4c,32
|
|
400
400
|
dagster/_core/launcher/__init__.py,sha256=DIMRPl1ewoVwkHalJHBenIrY613ayFY4siFy-LS4PlA,341
|
|
401
401
|
dagster/_core/launcher/base.py,sha256=sFqNIgpJdrd3fOXjm94B0KW9YGo-uwZIFoJiJCNyKFQ,3975
|
|
@@ -431,7 +431,7 @@ dagster/_core/secrets/__init__.py,sha256=IfDPSHxybLX0LUO1437ylFQfHzONhw54-NIz5uj
|
|
|
431
431
|
dagster/_core/secrets/env_file.py,sha256=MVgeGILctWVUyQG_6ayJI4VSKJWpqe2uTMFST5gzgLc,3603
|
|
432
432
|
dagster/_core/secrets/loader.py,sha256=ELKcddoY_s288wiAqj3ojWEZJJl0plFittS_5SJR-Z4,415
|
|
433
433
|
dagster/_core/selector/__init__.py,sha256=zHW8p1gqvzC5Pe509crYBO8FbmQDDIxepVg6Fad-wPQ,317
|
|
434
|
-
dagster/_core/selector/subset_selector.py,sha256=
|
|
434
|
+
dagster/_core/selector/subset_selector.py,sha256=o-GKOFmZ33tOzE3CsHOTas5d_4RJCK7pJLJzYcfnvCY,17717
|
|
435
435
|
dagster/_core/snap/__init__.py,sha256=0ZXvYicZC79gIpCmlOkCtAxlAHwv3EhR_NWKrsI9zro,2905
|
|
436
436
|
dagster/_core/snap/config_types.py,sha256=eP6eFKus93kmc3FehFEHshBq9TMYYSLwpnLodCabLkk,494
|
|
437
437
|
dagster/_core/snap/dagster_types.py,sha256=lcn5Dv5M4uUAo6hR8_V7-kLPYTbK5M1qe0r4rVvCV6A,3973
|
|
@@ -439,7 +439,7 @@ dagster/_core/snap/dep_snapshot.py,sha256=_ln6vrgG9HLWldXS2-U0vmNPdGPjiHBojSJEA8
|
|
|
439
439
|
dagster/_core/snap/execution_plan_snapshot.py,sha256=hlGFfhKUctzktpGcfuptZLhNKgGq25en9wDVTbrnRb8,13707
|
|
440
440
|
dagster/_core/snap/job_snapshot.py,sha256=1kPnphm1o6dNzgDli8Tg1O2KFxkW1m9OEkWqb50ZO-k,16217
|
|
441
441
|
dagster/_core/snap/mode.py,sha256=nweBDcB6ijQlwKd3jctfi_OHcWfiPYUw8g7QpY_IXX4,4534
|
|
442
|
-
dagster/_core/snap/node.py,sha256=
|
|
442
|
+
dagster/_core/snap/node.py,sha256=TdJJMelZaoM5Im6CbcNEsiS2nmWKcm5SSehjVe7zkOU,10995
|
|
443
443
|
dagster/_core/snap/snap_to_yaml.py,sha256=iDKEsKVhfIWQ62PTMIEd6Kb9Vr4_qIN-1ywEuP7hfvY,4956
|
|
444
444
|
dagster/_core/storage/DEVELOPING.md,sha256=PsXFNmwC4oMADf8IjapMl_0hNeDXGDdgOPJfWQMAEqc,3058
|
|
445
445
|
dagster/_core/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -467,9 +467,9 @@ dagster/_core/storage/sql.py,sha256=M1l01vs5amQhqTlQXqTrJMMjJJEhtSqf-CkHuNKzsVg,
|
|
|
467
467
|
dagster/_core/storage/sqlalchemy_compat.py,sha256=hJkTCEvWVCs8Dl2NF6XLl_ZTD5HguwkUCH1rvBOyqPs,1418
|
|
468
468
|
dagster/_core/storage/sqlite.py,sha256=UJBxJB2LjthTIyo_vlSM3E8SZ-eTkNS-bbvkUgqlwX0,987
|
|
469
469
|
dagster/_core/storage/sqlite_storage.py,sha256=6S0dAfWWTS2gI9NUF1JoIjFSezCWD5hss2urzhe7YMs,5118
|
|
470
|
-
dagster/_core/storage/tags.py,sha256=
|
|
470
|
+
dagster/_core/storage/tags.py,sha256=scNRylKjx8BRXlm9LeLUt2QDh9R1O2alhyKlVVWhVdQ,5046
|
|
471
471
|
dagster/_core/storage/temp_file_manager.py,sha256=G3DypR7gVZ-KYDkeQYQ6xTt8FvziosTV08IJzWJxnBc,1186
|
|
472
|
-
dagster/_core/storage/upath_io_manager.py,sha256=
|
|
472
|
+
dagster/_core/storage/upath_io_manager.py,sha256=ZOUXc5b7lXtS7UdV_XK9iAgLQqG3dYmcuERMvBztaeA,19982
|
|
473
473
|
dagster/_core/storage/alembic/README.md,sha256=Wd_be8adt27LqpZIAuLVcsi9gYM9BqCWh0CBs1kkTzY,6686
|
|
474
474
|
dagster/_core/storage/alembic/env.py,sha256=dgRQTL9K7b6q5oz0is1Tst18j3vJm3oeZDNPaT4Kn9c,687
|
|
475
475
|
dagster/_core/storage/alembic/script.py.mako,sha256=8_xgA-gm_OhehnO7CiIijWgnm00ZlszEHtIHrAYFJl0,494
|
|
@@ -559,7 +559,9 @@ dagster/_core/storage/alembic/versions/045_1aca709bba64_add_runs_table_backfill_
|
|
|
559
559
|
dagster/_core/storage/alembic/versions/046_16e3655b4d9b045_add_bulk_actions_job_name_column_and_tags_table.py,sha256=eXf5BlgFGP49HNOqN87S6dF0VF6QYdmr1F7jppUJDl8,1887
|
|
560
560
|
dagster/_core/storage/alembic/versions/047_add_run_tags_run_id_idx.py,sha256=yLAJW8NeGGU2P43V0ck9J4JwLWObw3EipLchOwzUStA,1545
|
|
561
561
|
dagster/_core/storage/alembic/versions/048_7e2f3204cf8e_add_column_concurrency_default_limit.py,sha256=zecovfh9K-P9EWqoFgljiFzxrQnkcU4HGLu4KdGmJeU,1040
|
|
562
|
+
dagster/_core/storage/alembic/versions/29b539ebc72a_use_longtext_on_bulk_actions_body_in_.py,sha256=DnNeowQ_pQ92Qa99RtEtbmOKF9Qbv8bJMfZo-mtmn3g,1102
|
|
562
563
|
dagster/_core/storage/alembic/versions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
564
|
+
dagster/_core/storage/alembic/versions/f495c27d5019_use_longtext_on_asset_keys_cached_.py,sha256=NJ0OcTExBLI5aBvFzhm8nVdxh0FixPmDgXcu-QBDIrQ,1138
|
|
563
565
|
dagster/_core/storage/branching/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
564
566
|
dagster/_core/storage/branching/branching_io_manager.py,sha256=i-xVVHPRYQSf8-zAeF6SlILXf_xBJsWl_sN_2NFCbWE,5400
|
|
565
567
|
dagster/_core/storage/defs_state/__init__.py,sha256=0WtIMSuG58s7GB7i-hcGs819p6rez_b9jpgEVBzbGxA,215
|
|
@@ -570,7 +572,7 @@ dagster/_core/storage/event_log/base.py,sha256=nrnxXjsHs2ZPtIoNGH0QXdGxurVX7Efh5
|
|
|
570
572
|
dagster/_core/storage/event_log/in_memory.py,sha256=69Xr_CQmUKCYwN9bqj0UeaQyje-afvBtwImRguvwJFs,3968
|
|
571
573
|
dagster/_core/storage/event_log/migration.py,sha256=lYAt0274GDkBhSokaDn-XcaRP8hQi7fitzIsNptHBS0,7746
|
|
572
574
|
dagster/_core/storage/event_log/polling_event_watcher.py,sha256=buSAd86687K0ZU5lFrldgLKQetSmur44I0VhtePqVeI,8267
|
|
573
|
-
dagster/_core/storage/event_log/schema.py,sha256=
|
|
575
|
+
dagster/_core/storage/event_log/schema.py,sha256=Fu86AF9XdN5xkre2hnv0NIN_gH0NJMmyN7erq9qC-AQ,9620
|
|
574
576
|
dagster/_core/storage/event_log/sql_event_log.py,sha256=yx5T7qy9Nfxj5xFe6KcMgkzjNDlx0hkxnEubr9MRQpk,138788
|
|
575
577
|
dagster/_core/storage/event_log/sqlite/__init__.py,sha256=T3eBD9JhH-rqX6X6AWLi8f-qdMlIoOlzkVih8Ah_4eM,285
|
|
576
578
|
dagster/_core/storage/event_log/sqlite/consolidated_sqlite_event_log.py,sha256=mRThLWzzz2DyitFRi6tykiJCEIT40frg6y-sIEpH-LQ,7612
|
|
@@ -583,7 +585,7 @@ dagster/_core/storage/runs/__init__.py,sha256=Vfjtc_Uz1rM7JJTZjBvR21s1b16toCfRb6
|
|
|
583
585
|
dagster/_core/storage/runs/base.py,sha256=ARENVVno_1_ZLTSjw45fuKTeg2IDthExkUTbkQmzDR8,13885
|
|
584
586
|
dagster/_core/storage/runs/in_memory.py,sha256=8ceDjiZJCYPswiCh2H4g-rcCaA0Wwr_S9pQWgUH3NDI,2859
|
|
585
587
|
dagster/_core/storage/runs/migration.py,sha256=pqgQ8Hbi7AkDUk3NXUgzk-wQh-802oNqIlpLl1fu7oI,15243
|
|
586
|
-
dagster/_core/storage/runs/schema.py,sha256=
|
|
588
|
+
dagster/_core/storage/runs/schema.py,sha256=6YarYzndOBjVtqHPRpbDEYHATDhFpFt0mSyWokMuNrU,7268
|
|
587
589
|
dagster/_core/storage/runs/sql_run_storage.py,sha256=HVst3CBkBXlu_oP82bSB7z2-T9MCNQhF1Ex6PNijVyM,47102
|
|
588
590
|
dagster/_core/storage/runs/sqlite/__init__.py,sha256=OvHIG9P6W-p6UMzRDdB770IX1-qOkelcW7himKSMg_A,111
|
|
589
591
|
dagster/_core/storage/runs/sqlite/sqlite_run_storage.py,sha256=OWu45Vv33_RXmWPWD1fvM6xZhS0lHX9rZ6CCdgtc8Ts,7309
|
|
@@ -640,7 +642,7 @@ dagster/_daemon/run_coordinator/__init__.py,sha256=bGB6eE5Qujr9tpPaXuHXbzioywsc9
|
|
|
640
642
|
dagster/_daemon/run_coordinator/queued_run_coordinator_daemon.py,sha256=qu2NQCFJ7YIFydb8zyfpeyOwZZXdaK5Sat3rP5O94Wc,20211
|
|
641
643
|
dagster/_experimental/__init__.py,sha256=neUdP3MLSFZjVTpc_mraGEkrt-SEAiYJGeX44JzyMlk,300
|
|
642
644
|
dagster/_generate/__init__.py,sha256=RctCCaSawF_t6F2XkN48ytPX-VqRjAEHC09d6P3Of88,233
|
|
643
|
-
dagster/_generate/download.py,sha256=
|
|
645
|
+
dagster/_generate/download.py,sha256=984QWtHFRswfD6USOlYt6Yr2_xBxZL3EgOEP1JvrFqw,3346
|
|
644
646
|
dagster/_generate/generate.py,sha256=vNOP3n9p8QOwYP-2V7Su4tA08YxgmlSrj0tfA24ByFo,1422
|
|
645
647
|
dagster/_generate/templates/PROJECT_NAME_PLACEHOLDER/README.md.jinja,sha256=pRETiGTZ6_W87mw2x3qB_TU-J1i3nGpWQWZh0PnXdOk,1742
|
|
646
648
|
dagster/_generate/templates/PROJECT_NAME_PLACEHOLDER/pyproject.toml.jinja,sha256=-Xu-80ZRhpWX4g7x6Fhmmm6iEXzB4RP8oUn9AJQ8qI4,546
|
|
@@ -822,9 +824,9 @@ dagster/components/utils/translation.py,sha256=gKal6ZdMbYImiBLZVa9E2pz4690j8Hukf
|
|
|
822
824
|
dagster/deprecated/__init__.py,sha256=fkuCwd_79EmS-Voox0YlWEHWxZwQ0ZM_V0viwxw5isw,127
|
|
823
825
|
dagster/preview/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
824
826
|
dagster/preview/freshness/__init__.py,sha256=zq0UU-3mnxycgJDtAZ9DFWiBh4eXxKCaKbeuRmUl3_Y,276
|
|
825
|
-
dagster-1.12.
|
|
826
|
-
dagster-1.12.
|
|
827
|
-
dagster-1.12.
|
|
828
|
-
dagster-1.12.
|
|
829
|
-
dagster-1.12.
|
|
830
|
-
dagster-1.12.
|
|
827
|
+
dagster-1.12.10.dist-info/licenses/LICENSE,sha256=4lsMW-RCvfVD4_F57wrmpe3vX1xwUk_OAKKmV_XT7Z0,11348
|
|
828
|
+
dagster-1.12.10.dist-info/METADATA,sha256=w6opX1P_6S3ZXRIUq6gHcZBmFBAh7egvvlFwTK0VB2A,12218
|
|
829
|
+
dagster-1.12.10.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
830
|
+
dagster-1.12.10.dist-info/entry_points.txt,sha256=D4W0jf1lM8zq82j3DJd9JkZEmHdFz5gkz8ddRzOEzpc,139
|
|
831
|
+
dagster-1.12.10.dist-info/top_level.txt,sha256=Gx3NqlMQh6AsfIZaJJXEfep5yh-e9pUxkzOlUV3s6CM,8
|
|
832
|
+
dagster-1.12.10.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|