dagster 1.12.4__py3-none-any.whl → 1.12.6__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/_config/field.py +11 -0
- dagster/_config/pythonic_config/conversion_utils.py +5 -0
- dagster/_config/snap.py +3 -1
- dagster/_core/definitions/partitions/subset/time_window.py +4 -3
- dagster/_core/events/__init__.py +21 -0
- dagster/_core/execution/asset_backfill.py +7 -8
- dagster/_utils/schedules.py +62 -36
- dagster/components/resolved/base.py +5 -1
- dagster/version.py +1 -1
- {dagster-1.12.4.dist-info → dagster-1.12.6.dist-info}/METADATA +3 -3
- {dagster-1.12.4.dist-info → dagster-1.12.6.dist-info}/RECORD +15 -15
- {dagster-1.12.4.dist-info → dagster-1.12.6.dist-info}/WHEEL +0 -0
- {dagster-1.12.4.dist-info → dagster-1.12.6.dist-info}/entry_points.txt +0 -0
- {dagster-1.12.4.dist-info → dagster-1.12.6.dist-info}/licenses/LICENSE +0 -0
- {dagster-1.12.4.dist-info → dagster-1.12.6.dist-info}/top_level.txt +0 -0
dagster/_config/field.py
CHANGED
|
@@ -237,6 +237,9 @@ class Field:
|
|
|
237
237
|
description (str):
|
|
238
238
|
A human-readable description of this config field.
|
|
239
239
|
|
|
240
|
+
is_secret (bool):
|
|
241
|
+
Whether this field contains sensitive data that should be masked in UIs. Defaults to False.
|
|
242
|
+
|
|
240
243
|
Examples:
|
|
241
244
|
.. code-block:: python
|
|
242
245
|
|
|
@@ -268,6 +271,7 @@ class Field:
|
|
|
268
271
|
default_value: Any = FIELD_NO_DEFAULT_PROVIDED,
|
|
269
272
|
is_required: Optional[bool] = None,
|
|
270
273
|
description: Optional[str] = None,
|
|
274
|
+
is_secret: bool = False,
|
|
271
275
|
):
|
|
272
276
|
from dagster._config.post_process import resolve_defaults
|
|
273
277
|
from dagster._config.validate import validate_config
|
|
@@ -275,6 +279,7 @@ class Field:
|
|
|
275
279
|
self.config_type = check.inst(self._resolve_config_arg(config), ConfigType)
|
|
276
280
|
|
|
277
281
|
self._description = check.opt_str_param(description, "description")
|
|
282
|
+
self._is_secret = check.bool_param(is_secret, "is_secret")
|
|
278
283
|
|
|
279
284
|
check.opt_bool_param(is_required, "is_required")
|
|
280
285
|
|
|
@@ -367,6 +372,12 @@ class Field:
|
|
|
367
372
|
"""A human-readable description of this config field, if provided."""
|
|
368
373
|
return self._description
|
|
369
374
|
|
|
375
|
+
@public
|
|
376
|
+
@property
|
|
377
|
+
def is_secret(self) -> bool:
|
|
378
|
+
"""Whether this field contains sensitive data that should be masked in UIs."""
|
|
379
|
+
return self._is_secret
|
|
380
|
+
|
|
370
381
|
@property
|
|
371
382
|
def default_value_as_json_str(self) -> str:
|
|
372
383
|
check.invariant(self.default_provided, "Asking for default value when none was provided")
|
|
@@ -144,6 +144,10 @@ def _convert_pydantic_field(
|
|
|
144
144
|
if isinstance(default_to_pass, Enum):
|
|
145
145
|
default_to_pass = default_to_pass.name
|
|
146
146
|
|
|
147
|
+
# Extract is_secret from json_schema_extra
|
|
148
|
+
extras = pydantic_field.json_schema_extra or {}
|
|
149
|
+
is_secret = bool(extras.get("dagster__is_secret", False))
|
|
150
|
+
|
|
147
151
|
return Field(
|
|
148
152
|
config=config_type,
|
|
149
153
|
description=pydantic_field.description,
|
|
@@ -151,6 +155,7 @@ def _convert_pydantic_field(
|
|
|
151
155
|
and not is_closed_python_optional_type(field_type)
|
|
152
156
|
and default_to_pass == FIELD_NO_DEFAULT_PROVIDED,
|
|
153
157
|
default_value=default_to_pass,
|
|
158
|
+
is_secret=is_secret,
|
|
154
159
|
)
|
|
155
160
|
|
|
156
161
|
|
dagster/_config/snap.py
CHANGED
|
@@ -169,7 +169,7 @@ class ConfigEnumValueSnap:
|
|
|
169
169
|
description: Optional[str]
|
|
170
170
|
|
|
171
171
|
|
|
172
|
-
@whitelist_for_serdes
|
|
172
|
+
@whitelist_for_serdes(skip_when_none_fields={"is_secret"})
|
|
173
173
|
@record
|
|
174
174
|
class ConfigFieldSnap:
|
|
175
175
|
name: Optional[str]
|
|
@@ -178,6 +178,7 @@ class ConfigFieldSnap:
|
|
|
178
178
|
default_provided: bool
|
|
179
179
|
default_value_as_json_str: Optional[str]
|
|
180
180
|
description: Optional[str]
|
|
181
|
+
is_secret: Optional[bool] = None
|
|
181
182
|
|
|
182
183
|
|
|
183
184
|
def snap_from_field(name: str, field: Field):
|
|
@@ -190,6 +191,7 @@ def snap_from_field(name: str, field: Field):
|
|
|
190
191
|
field.default_value_as_json_str if field.default_provided else None
|
|
191
192
|
),
|
|
192
193
|
description=field.description,
|
|
194
|
+
is_secret=field.is_secret if field.is_secret else None,
|
|
193
195
|
)
|
|
194
196
|
|
|
195
197
|
|
|
@@ -398,10 +398,11 @@ class TimeWindowPartitionsSubset(
|
|
|
398
398
|
"num_partitions would become inaccurate if the partitions_defs had different cron"
|
|
399
399
|
" schedules",
|
|
400
400
|
)
|
|
401
|
+
self_as_dict = self._asdict()
|
|
401
402
|
return TimeWindowPartitionsSubset(
|
|
402
403
|
partitions_def=partitions_def,
|
|
403
|
-
num_partitions=
|
|
404
|
-
included_time_windows=
|
|
404
|
+
num_partitions=self_as_dict["num_partitions"],
|
|
405
|
+
included_time_windows=self_as_dict["included_time_windows"],
|
|
405
406
|
)
|
|
406
407
|
|
|
407
408
|
def __repr__(self) -> str:
|
|
@@ -576,7 +577,7 @@ class TimeWindowPartitionsSubset(
|
|
|
576
577
|
# note that we rarely serialize subsets on the user code side of a serialization boundary,
|
|
577
578
|
# and so this conversion is rarely necessary.
|
|
578
579
|
partitions_def = self.partitions_def
|
|
579
|
-
if type(self.partitions_def) !=
|
|
580
|
+
if type(self.partitions_def) != TimeWindowPartitionsDefinition:
|
|
580
581
|
partitions_def = TimeWindowPartitionsSnap.from_def(
|
|
581
582
|
partitions_def
|
|
582
583
|
).get_partitions_definition()
|
dagster/_core/events/__init__.py
CHANGED
|
@@ -105,6 +105,7 @@ EventSpecificData = Union[
|
|
|
105
105
|
"FreshnessStateChange",
|
|
106
106
|
"AssetHealthChangedData",
|
|
107
107
|
"AssetWipedData",
|
|
108
|
+
"CodeLocationUpdatedData",
|
|
108
109
|
]
|
|
109
110
|
|
|
110
111
|
|
|
@@ -187,6 +188,8 @@ class DagsterEventType(str, Enum):
|
|
|
187
188
|
FRESHNESS_STATE_EVALUATION = "FRESHNESS_STATE_EVALUATION"
|
|
188
189
|
FRESHNESS_STATE_CHANGE = "FRESHNESS_STATE_CHANGE"
|
|
189
190
|
|
|
191
|
+
CODE_LOCATION_UPDATED = "CODE_LOCATION_UPDATED"
|
|
192
|
+
|
|
190
193
|
|
|
191
194
|
EVENT_TYPE_TO_DISPLAY_STRING = {
|
|
192
195
|
DagsterEventType.PIPELINE_ENQUEUED: "RUN_ENQUEUED",
|
|
@@ -363,6 +366,8 @@ def _validate_event_specific_data(
|
|
|
363
366
|
check.inst_param(event_specific_data, "event_specific_data", AssetCheckEvaluation)
|
|
364
367
|
elif event_type == DagsterEventType.RUN_ENQUEUED:
|
|
365
368
|
check.opt_inst_param(event_specific_data, "event_specific_data", RunEnqueuedData)
|
|
369
|
+
elif event_type == DagsterEventType.CODE_LOCATION_UPDATED:
|
|
370
|
+
check.opt_inst_param(event_specific_data, "event_specific_data", CodeLocationUpdatedData)
|
|
366
371
|
|
|
367
372
|
return event_specific_data
|
|
368
373
|
|
|
@@ -901,6 +906,15 @@ class DagsterEvent(
|
|
|
901
906
|
)
|
|
902
907
|
return cast("AssetWipedData", self.event_specific_data)
|
|
903
908
|
|
|
909
|
+
@property
|
|
910
|
+
def code_location_updated_data(self) -> "CodeLocationUpdatedData":
|
|
911
|
+
_assert_type(
|
|
912
|
+
"code_location_updated_data",
|
|
913
|
+
DagsterEventType.CODE_LOCATION_UPDATED,
|
|
914
|
+
self.event_type,
|
|
915
|
+
)
|
|
916
|
+
return cast("CodeLocationUpdatedData", self.event_specific_data)
|
|
917
|
+
|
|
904
918
|
@property
|
|
905
919
|
def step_expectation_result_data(self) -> "StepExpectationResultData":
|
|
906
920
|
_assert_type(
|
|
@@ -1819,6 +1833,13 @@ class AssetWipedData:
|
|
|
1819
1833
|
partition_keys: Optional[Sequence[str]]
|
|
1820
1834
|
|
|
1821
1835
|
|
|
1836
|
+
@whitelist_for_serdes
|
|
1837
|
+
@record
|
|
1838
|
+
class CodeLocationUpdatedData:
|
|
1839
|
+
code_location_name: str
|
|
1840
|
+
new_version_key: str
|
|
1841
|
+
|
|
1842
|
+
|
|
1822
1843
|
@whitelist_for_serdes
|
|
1823
1844
|
class StepExpectationResultData(
|
|
1824
1845
|
NamedTuple(
|
|
@@ -1619,14 +1619,13 @@ def _execute_asset_backfill_iteration_inner(
|
|
|
1619
1619
|
f"The following assets were considered for materialization but not requested:\n\n{not_requested_str}"
|
|
1620
1620
|
)
|
|
1621
1621
|
|
|
1622
|
-
run_requests =
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
)
|
|
1629
|
-
]
|
|
1622
|
+
run_requests = build_run_requests_with_backfill_policies(
|
|
1623
|
+
asset_partitions=asset_partitions_to_request,
|
|
1624
|
+
asset_graph=asset_graph,
|
|
1625
|
+
dynamic_partitions_store=instance_queryer,
|
|
1626
|
+
)
|
|
1627
|
+
if run_config is not None:
|
|
1628
|
+
run_requests = [rr._replace(run_config=run_config) for rr in run_requests]
|
|
1630
1629
|
|
|
1631
1630
|
if request_roots:
|
|
1632
1631
|
check.invariant(
|
dagster/_utils/schedules.py
CHANGED
|
@@ -227,40 +227,54 @@ def _find_hourly_schedule_time(
|
|
|
227
227
|
def _find_daily_schedule_time(
|
|
228
228
|
minute: int,
|
|
229
229
|
hour: int,
|
|
230
|
+
days_of_week: Optional[Sequence[int]],
|
|
230
231
|
date: datetime.datetime,
|
|
231
232
|
ascending: bool,
|
|
232
233
|
already_on_boundary: bool,
|
|
233
234
|
) -> datetime.datetime:
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
date,
|
|
240
|
-
hour,
|
|
241
|
-
minute,
|
|
242
|
-
date.day,
|
|
235
|
+
num_iterations = 0
|
|
236
|
+
while True: # until the day of week matches if needed
|
|
237
|
+
check.invariant(
|
|
238
|
+
num_iterations < 10, # 1 week plus a buffer
|
|
239
|
+
"Computing next schedule daily schedule time should eventually reach an intended day of week",
|
|
243
240
|
)
|
|
244
|
-
|
|
245
|
-
|
|
241
|
+
# First move to the correct time of day today (ignoring whether it is the correct day)
|
|
242
|
+
if not already_on_boundary or (
|
|
243
|
+
date.hour != hour or date.minute != minute or date.second != 0 or date.microsecond != 0
|
|
244
|
+
):
|
|
245
|
+
new_time = _replace_date_fields(
|
|
246
|
+
date,
|
|
247
|
+
hour,
|
|
248
|
+
minute,
|
|
249
|
+
date.day,
|
|
250
|
+
)
|
|
251
|
+
else:
|
|
252
|
+
new_time = date
|
|
246
253
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
254
|
+
if ascending:
|
|
255
|
+
if already_on_boundary or new_time.timestamp() <= date.timestamp():
|
|
256
|
+
new_time = new_time + datetime.timedelta(days=1)
|
|
257
|
+
else:
|
|
258
|
+
if already_on_boundary or new_time.timestamp() >= date.timestamp():
|
|
259
|
+
new_time = new_time - datetime.timedelta(days=1)
|
|
260
|
+
|
|
261
|
+
# If the hour or minute has changed the schedule in cronstring,
|
|
262
|
+
# double-check that it's still correct in case we crossed a DST boundary
|
|
263
|
+
if new_time.hour != hour or new_time.minute != minute:
|
|
264
|
+
new_time = _replace_date_fields(
|
|
265
|
+
new_time,
|
|
266
|
+
hour,
|
|
267
|
+
minute,
|
|
268
|
+
new_time.day,
|
|
269
|
+
)
|
|
270
|
+
date = apply_fold_and_post_transition(new_time)
|
|
253
271
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
minute,
|
|
261
|
-
new_time.day,
|
|
262
|
-
)
|
|
263
|
-
return apply_fold_and_post_transition(new_time)
|
|
272
|
+
if (not days_of_week) or (_get_crontab_day_of_week(date) in days_of_week):
|
|
273
|
+
return date
|
|
274
|
+
|
|
275
|
+
# otherwise, repeat and keep moving until the day of the week matches
|
|
276
|
+
already_on_boundary = True
|
|
277
|
+
num_iterations += 1
|
|
264
278
|
|
|
265
279
|
|
|
266
280
|
def _get_crontab_day_of_week(dt: datetime.datetime) -> int:
|
|
@@ -361,7 +375,7 @@ def _find_schedule_time(
|
|
|
361
375
|
minutes: Optional[Sequence[int]],
|
|
362
376
|
hour: Optional[int],
|
|
363
377
|
day_of_month: Optional[int],
|
|
364
|
-
|
|
378
|
+
days_of_week: Optional[Sequence[int]],
|
|
365
379
|
schedule_type: "ScheduleType",
|
|
366
380
|
date: datetime.datetime,
|
|
367
381
|
ascending: bool,
|
|
@@ -381,6 +395,7 @@ def _find_schedule_time(
|
|
|
381
395
|
return _find_daily_schedule_time(
|
|
382
396
|
minutes[0],
|
|
383
397
|
check.not_none(hour),
|
|
398
|
+
days_of_week,
|
|
384
399
|
date,
|
|
385
400
|
ascending,
|
|
386
401
|
already_on_boundary,
|
|
@@ -388,10 +403,13 @@ def _find_schedule_time(
|
|
|
388
403
|
elif schedule_type == ScheduleType.WEEKLY:
|
|
389
404
|
minutes = check.not_none(minutes)
|
|
390
405
|
check.invariant(len(minutes) == 1)
|
|
406
|
+
check.invariant(
|
|
407
|
+
days_of_week is not None and len(days_of_week) == 1
|
|
408
|
+
) # must be a single numeric day of week to be WEEKLY
|
|
391
409
|
return _find_weekly_schedule_time(
|
|
392
410
|
minutes[0],
|
|
393
411
|
check.not_none(hour),
|
|
394
|
-
check.not_none(
|
|
412
|
+
check.not_none(days_of_week)[0],
|
|
395
413
|
date,
|
|
396
414
|
ascending,
|
|
397
415
|
already_on_boundary,
|
|
@@ -661,12 +679,16 @@ def cron_string_iterator(
|
|
|
661
679
|
cron_part != "*" for cron_part in cron_parts[0]
|
|
662
680
|
)
|
|
663
681
|
|
|
682
|
+
all_numeric_days_of_week = len(cron_parts[4]) > 0 and all(
|
|
683
|
+
isinstance(cron_part, int) for cron_part in cron_parts[4]
|
|
684
|
+
)
|
|
685
|
+
|
|
664
686
|
known_schedule_type: Optional[ScheduleType] = None
|
|
665
687
|
|
|
666
688
|
expected_hour = None
|
|
667
689
|
expected_minutes = None
|
|
668
690
|
expected_day = None
|
|
669
|
-
|
|
691
|
+
expected_days_of_week = None
|
|
670
692
|
|
|
671
693
|
# Special-case common intervals (hourly/daily/weekly/monthly) since croniter iteration can be
|
|
672
694
|
# much slower and has correctness issues on DST boundaries
|
|
@@ -679,7 +701,11 @@ def cron_string_iterator(
|
|
|
679
701
|
known_schedule_type = ScheduleType.MONTHLY
|
|
680
702
|
elif all(is_numeric[0:2]) and is_numeric[4] and all(is_wildcard[2:4]): # weekly
|
|
681
703
|
known_schedule_type = ScheduleType.WEEKLY
|
|
682
|
-
elif
|
|
704
|
+
elif (
|
|
705
|
+
all(is_numeric[0:2])
|
|
706
|
+
and all(is_wildcard[2:4])
|
|
707
|
+
and (is_wildcard[4] or all_numeric_days_of_week)
|
|
708
|
+
): # daily
|
|
683
709
|
known_schedule_type = ScheduleType.DAILY
|
|
684
710
|
elif all_numeric_minutes and all(is_wildcard[1:]): # hourly
|
|
685
711
|
known_schedule_type = ScheduleType.HOURLY
|
|
@@ -693,8 +719,8 @@ def cron_string_iterator(
|
|
|
693
719
|
if is_numeric[2]:
|
|
694
720
|
expected_day = cron_parts[2][0]
|
|
695
721
|
|
|
696
|
-
if
|
|
697
|
-
|
|
722
|
+
if all_numeric_days_of_week:
|
|
723
|
+
expected_days_of_week = cron_parts[4]
|
|
698
724
|
|
|
699
725
|
if known_schedule_type:
|
|
700
726
|
start_datetime = datetime.datetime.fromtimestamp(
|
|
@@ -712,7 +738,7 @@ def cron_string_iterator(
|
|
|
712
738
|
expected_minutes, # pyright: ignore[reportArgumentType]
|
|
713
739
|
expected_hour, # pyright: ignore[reportArgumentType]
|
|
714
740
|
expected_day, # pyright: ignore[reportArgumentType]
|
|
715
|
-
|
|
741
|
+
expected_days_of_week, # pyright: ignore[reportArgumentType]
|
|
716
742
|
known_schedule_type,
|
|
717
743
|
start_datetime,
|
|
718
744
|
ascending=not ascending, # Going in the reverse direction
|
|
@@ -724,7 +750,7 @@ def cron_string_iterator(
|
|
|
724
750
|
expected_minutes, # pyright: ignore[reportArgumentType]
|
|
725
751
|
expected_hour, # pyright: ignore[reportArgumentType]
|
|
726
752
|
expected_day, # pyright: ignore[reportArgumentType]
|
|
727
|
-
|
|
753
|
+
expected_days_of_week, # pyright: ignore[reportArgumentType]
|
|
728
754
|
known_schedule_type,
|
|
729
755
|
next_date,
|
|
730
756
|
ascending=not ascending, # Going in the reverse direction
|
|
@@ -736,7 +762,7 @@ def cron_string_iterator(
|
|
|
736
762
|
expected_minutes, # pyright: ignore[reportArgumentType]
|
|
737
763
|
expected_hour, # pyright: ignore[reportArgumentType]
|
|
738
764
|
expected_day, # pyright: ignore[reportArgumentType]
|
|
739
|
-
|
|
765
|
+
expected_days_of_week, # pyright: ignore[reportArgumentType]
|
|
740
766
|
known_schedule_type,
|
|
741
767
|
next_date,
|
|
742
768
|
ascending=ascending,
|
|
@@ -178,7 +178,11 @@ def derive_model_type(
|
|
|
178
178
|
|
|
179
179
|
field_infos = []
|
|
180
180
|
if annotation_info.field_info:
|
|
181
|
-
|
|
181
|
+
# remove the default_factory as we set a `default` marker field on the Model type
|
|
182
|
+
# for unserializable defaults (and functions are not serializable)
|
|
183
|
+
field_infos.append(
|
|
184
|
+
FieldInfo.merge_field_infos(annotation_info.field_info, default_factory=None)
|
|
185
|
+
)
|
|
182
186
|
|
|
183
187
|
if annotation_info.has_default:
|
|
184
188
|
# if the annotation has a serializable default
|
dagster/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "1.12.
|
|
1
|
+
__version__ = "1.12.6"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dagster
|
|
3
|
-
Version: 1.12.
|
|
3
|
+
Version: 1.12.6
|
|
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
|
|
@@ -59,8 +59,8 @@ Requires-Dist: universal_pathlib; python_version < "3.12"
|
|
|
59
59
|
Requires-Dist: universal_pathlib>=0.2.0; python_version >= "3.12"
|
|
60
60
|
Requires-Dist: rich
|
|
61
61
|
Requires-Dist: filelock
|
|
62
|
-
Requires-Dist: dagster-pipes==1.12.
|
|
63
|
-
Requires-Dist: dagster-shared==1.12.
|
|
62
|
+
Requires-Dist: dagster-pipes==1.12.6
|
|
63
|
+
Requires-Dist: dagster-shared==1.12.6
|
|
64
64
|
Requires-Dist: antlr4-python3-runtime
|
|
65
65
|
Provides-Extra: docker
|
|
66
66
|
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=K-O_Zmi1DuK_mEBcDOT_b5zNp9ONlW-73xBIaMAX9Fo,23
|
|
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
|
|
@@ -39,11 +39,11 @@ dagster/_config/config_schema.py,sha256=SH17SpLHdhldf9ncirlUmLjXU4X9w3lerFodv1Up
|
|
|
39
39
|
dagster/_config/config_type.py,sha256=x6P721kTXkGX_fDgMB7uI8nu6MbLKzyS6brkJPNIvJg,15903
|
|
40
40
|
dagster/_config/errors.py,sha256=jt6HWRCsTEeLAvFNY0deBi70-MRXeJC86QsjDeaF3lA,17290
|
|
41
41
|
dagster/_config/evaluate_value_result.py,sha256=FFqXuo5pxMZtKn-Xciq9BE1--Jf1zkBD0z1n9bucWAQ,1390
|
|
42
|
-
dagster/_config/field.py,sha256=
|
|
42
|
+
dagster/_config/field.py,sha256=5n3B4TY7Ardpc64JxcweqMrr0NLfynVlE4aYF7BmPZk,15373
|
|
43
43
|
dagster/_config/field_utils.py,sha256=9PA0ln6yD63I5HBzPTWSfWnyD8okfUYWa98BsFib0g8,19670
|
|
44
44
|
dagster/_config/post_process.py,sha256=YWa3GicUfY5bQ5goVWLUTvmgJySgjbCuOQPC1N4l1EE,9549
|
|
45
45
|
dagster/_config/primitive_mapping.py,sha256=0YAVfLyklI8xmdeca-U4h5CGSlsiCRWaSPddh21txp8,899
|
|
46
|
-
dagster/_config/snap.py,sha256=
|
|
46
|
+
dagster/_config/snap.py,sha256=wyHRmSw4uYokKMY75s146vsIUF4WB4PA9-2Bsp6I_9k,10811
|
|
47
47
|
dagster/_config/source.py,sha256=wRrhb6OIBCNSnOQv1zUUNUKMrylA5FjvOsvJhHu9j6Y,3526
|
|
48
48
|
dagster/_config/stack.py,sha256=5w0ITGNFhwGXugONa-CjcjQBvE-dDjT4FmOIjlTAaZc,3056
|
|
49
49
|
dagster/_config/traversal_context.py,sha256=WMagAF-R3zF3u5XM0lqz5-Gwc4L9WUI56TFwxMZR6kk,5737
|
|
@@ -52,7 +52,7 @@ dagster/_config/validate.py,sha256=CZqj_hMx8fxoIAZhMaWNygFLygIckS2QJo2p6GDcm6w,1
|
|
|
52
52
|
dagster/_config/pythonic_config/__init__.py,sha256=v7g8bWH6Og9T3iooklNakK1Qog6Bv1BTodExeF-yhu0,1388
|
|
53
53
|
dagster/_config/pythonic_config/attach_other_object_to_context.py,sha256=0BVfuIHFXhkvsaLTemHPpO3wi2ocwYQGfTp_gNyrMnQ,1632
|
|
54
54
|
dagster/_config/pythonic_config/config.py,sha256=92tN7cgIfAm_AbXqloj0TM_tVN4jr4OYUubpYTo0ZuM,20135
|
|
55
|
-
dagster/_config/pythonic_config/conversion_utils.py,sha256=
|
|
55
|
+
dagster/_config/pythonic_config/conversion_utils.py,sha256=DUHcsyDEsQcHtDzIcQRDlGSTI5x-SAnG2EmxsYGjLRA,13749
|
|
56
56
|
dagster/_config/pythonic_config/io_manager.py,sha256=BSAK5dN7Z8doMVbNNMmpC53LrEapd2zl1Dhj8zlaK0Y,10748
|
|
57
57
|
dagster/_config/pythonic_config/resource.py,sha256=5M14g3sg7NYZ7C_Q0OXCczrC2vFQupjESbLwfaqXkkY,42842
|
|
58
58
|
dagster/_config/pythonic_config/type_check_utils.py,sha256=K75S_1CGFf5KFAoxDbChNlvSFkGs1ru-nh1rPpSUGRc,775
|
|
@@ -289,7 +289,7 @@ dagster/_core/definitions/partitions/subset/default.py,sha256=ZGRyAZOAKJIA2H2OWB
|
|
|
289
289
|
dagster/_core/definitions/partitions/subset/key_ranges.py,sha256=FfID-dj-_kCJSfB-bLY6vkVy4X8IHC_I3L3B1OnDzAE,3765
|
|
290
290
|
dagster/_core/definitions/partitions/subset/partitions_subset.py,sha256=EVXFckSt-bTOkriRANO0Hp_2YDKkBAcSlp_C0teWgjc,4220
|
|
291
291
|
dagster/_core/definitions/partitions/subset/serialized.py,sha256=sfq8ITnECvm8y2I3sncBZHc2dLEXbK5NMYTCT4dkjmc,1524
|
|
292
|
-
dagster/_core/definitions/partitions/subset/time_window.py,sha256=
|
|
292
|
+
dagster/_core/definitions/partitions/subset/time_window.py,sha256=uSPTc02IEz9o0rRcHsOJWnuaxs2Vz50ahB_GNHtOyFY,29436
|
|
293
293
|
dagster/_core/definitions/partitions/utils/__init__.py,sha256=Wx1yojrhdxgZgbJxPEv3ZFnsJ-z7zhSNScVpKiV_7E0,1423
|
|
294
294
|
dagster/_core/definitions/partitions/utils/base.py,sha256=LkqcFPe-KnsdMYN70y07sL2U7X21qaacrFvt3MlKtLQ,1640
|
|
295
295
|
dagster/_core/definitions/partitions/utils/mapping.py,sha256=0IF5qk1PiXR32XCELGD99tJBUz0uiHJ555gCvc2mYlo,3226
|
|
@@ -303,12 +303,12 @@ dagster/_core/definitions/repository_definition/repository_definition.py,sha256=
|
|
|
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
|
|
306
|
-
dagster/_core/events/__init__.py,sha256=
|
|
306
|
+
dagster/_core/events/__init__.py,sha256=PnK29O4NvGBZVVDIgjRgzQ5GGGDvE7vjp1sEOpoWBw8,81650
|
|
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
310
|
dagster/_core/execution/api.py,sha256=gTSLXJ8CP_N826XA2JJW5GwdIyvRjlmHD3Jw-VaxR2k,39240
|
|
311
|
-
dagster/_core/execution/asset_backfill.py,sha256=
|
|
311
|
+
dagster/_core/execution/asset_backfill.py,sha256=_rBTiYWsX1_qABCNzFYDKvOxQlOyEJOT6gADjQdTYqs,95444
|
|
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
|
|
@@ -712,7 +712,7 @@ dagster/_utils/net.py,sha256=BD_9-2ycCeZGYB1W8uXeXc-Y7VsV37VpDPzDxCYRaLg,1533
|
|
|
712
712
|
dagster/_utils/partitions.py,sha256=a6JMGuKb3q6sJeRUjEfUSzcpmnA6nyU20HQMde85lBo,208
|
|
713
713
|
dagster/_utils/path.py,sha256=DeV_OuHwlasjV3_a-DR5ygtyWtKrEBp4vure7qeJYEM,250
|
|
714
714
|
dagster/_utils/pydantic_yaml.py,sha256=i6EbO784YDLQifQimndfG63eLX57iEr1QKrWDFnoUvk,7145
|
|
715
|
-
dagster/_utils/schedules.py,sha256=
|
|
715
|
+
dagster/_utils/schedules.py,sha256=X8q5jgbVHkhgv4lVUiWpYH924ksfEprrvpR6Q6PrLAs,38904
|
|
716
716
|
dagster/_utils/security.py,sha256=tbMWN_4mmegFf1tLD1xWNQDi_2eGe7drncCdSLZMmrI,461
|
|
717
717
|
dagster/_utils/storage.py,sha256=SJVn4qq1_WdMNXAqLtLPf9iVb-PTMvbiHOJbDmC8pSY,428
|
|
718
718
|
dagster/_utils/tags.py,sha256=OoTPTrVSs4N_eIE3YyrzEA1rGGREHKg12t2Rj7cSl2A,9771
|
|
@@ -801,7 +801,7 @@ dagster/components/lib/sql_component/sql_component.py,sha256=hfphuHdWq02-CcVqIX1
|
|
|
801
801
|
dagster/components/list/__init__.py,sha256=sgkMP-KLNI2C9XFJJlvj5ar4bZZHKu6lomriGXGCMRM,183
|
|
802
802
|
dagster/components/list/list.py,sha256=mCvzDPaODjuAecfNdkANl2bdsMLuU6aLv66qDVN93nw,11523
|
|
803
803
|
dagster/components/resolved/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
804
|
-
dagster/components/resolved/base.py,sha256=
|
|
804
|
+
dagster/components/resolved/base.py,sha256=ybv1WkQChlPBKHN7_VXIGtAohMV2WAnr2FOxyFWyVB0,20150
|
|
805
805
|
dagster/components/resolved/context.py,sha256=QyYnzdwGrLuanSPZLOCSytP7kOErCu_96BqhmPDX1so,8487
|
|
806
806
|
dagster/components/resolved/core_models.py,sha256=ZJV_w1a2-WDXsfaiKe5tNYE3q0Nzc-L2bYhC3PZPOS4,14384
|
|
807
807
|
dagster/components/resolved/errors.py,sha256=3-RCLJww0itUEtV2-kgTqTHzn5QX254pzTPrBSxKSJ4,42
|
|
@@ -822,9 +822,9 @@ dagster/components/utils/translation.py,sha256=gKal6ZdMbYImiBLZVa9E2pz4690j8Hukf
|
|
|
822
822
|
dagster/deprecated/__init__.py,sha256=fkuCwd_79EmS-Voox0YlWEHWxZwQ0ZM_V0viwxw5isw,127
|
|
823
823
|
dagster/preview/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
824
824
|
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.
|
|
825
|
+
dagster-1.12.6.dist-info/licenses/LICENSE,sha256=4lsMW-RCvfVD4_F57wrmpe3vX1xwUk_OAKKmV_XT7Z0,11348
|
|
826
|
+
dagster-1.12.6.dist-info/METADATA,sha256=2JENcKaUg8Duiurn-MU5auPbj5xAa2paUjAppsaNI0o,12221
|
|
827
|
+
dagster-1.12.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
828
|
+
dagster-1.12.6.dist-info/entry_points.txt,sha256=D4W0jf1lM8zq82j3DJd9JkZEmHdFz5gkz8ddRzOEzpc,139
|
|
829
|
+
dagster-1.12.6.dist-info/top_level.txt,sha256=Gx3NqlMQh6AsfIZaJJXEfep5yh-e9pUxkzOlUV3s6CM,8
|
|
830
|
+
dagster-1.12.6.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|