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 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=self.num_partitions,
404
- included_time_windows=self.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) != TimeWindowPartitionsSubset:
580
+ if type(self.partitions_def) != TimeWindowPartitionsDefinition:
580
581
  partitions_def = TimeWindowPartitionsSnap.from_def(
581
582
  partitions_def
582
583
  ).get_partitions_definition()
@@ -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
- rr._replace(run_config=run_config)
1624
- for rr in build_run_requests_with_backfill_policies(
1625
- asset_partitions=asset_partitions_to_request,
1626
- asset_graph=asset_graph,
1627
- dynamic_partitions_store=instance_queryer,
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(
@@ -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
- # First move to the correct time of day today (ignoring whether it is the correct day)
235
- if not already_on_boundary or (
236
- date.hour != hour or date.minute != minute or date.second != 0 or date.microsecond != 0
237
- ):
238
- new_time = _replace_date_fields(
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
- else:
245
- new_time = date
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
- if ascending:
248
- if already_on_boundary or new_time.timestamp() <= date.timestamp():
249
- new_time = new_time + datetime.timedelta(days=1)
250
- else:
251
- if already_on_boundary or new_time.timestamp() >= date.timestamp():
252
- new_time = new_time - datetime.timedelta(days=1)
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
- # If the hour or minute has changed the schedule in cronstring,
255
- # double-check that it's still correct in case we crossed a DST boundary
256
- if new_time.hour != hour or new_time.minute != minute:
257
- new_time = _replace_date_fields(
258
- new_time,
259
- hour,
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
- day_of_week: Optional[int],
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(day_of_week),
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
- expected_day_of_week = None
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 all(is_numeric[0:2]) and all(is_wildcard[2:]): # daily
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 is_numeric[4]:
697
- expected_day_of_week = cron_parts[4][0]
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
- expected_day_of_week, # pyright: ignore[reportArgumentType]
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
- expected_day_of_week, # pyright: ignore[reportArgumentType]
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
- expected_day_of_week, # pyright: ignore[reportArgumentType]
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
- field_infos.append(annotation_info.field_info)
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.4"
1
+ __version__ = "1.12.6"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dagster
3
- Version: 1.12.4
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.4
63
- Requires-Dist: dagster-shared==1.12.4
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=ECTpCDnMmYt-JTZQ4h1vRvo71Pv0brM8s8fcdkN0PoM,23
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=FFHavM5i-VZ8k-XDYXETFwGvtthb-98pxc76OatOivY,14964
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=eAKWsXN0B5mZosiu0WRGzXAgFx92m8UwcKim7lG8Po4,10673
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=lZbTuEx9vMKkX30WHtawZuvzAp4hgpdwOWaIDUEg7vU,13542
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=2y_O5xWkq3qVN03yUBRyWUmKa-yqe4RLaKqDnltxhc4,29372
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=yLAsTUEpFjSCLz-jQ_akJUt_0R3bdnEMb9wzz13EQEE,80975
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=G_TiSham-6J6qif4jPvQFlo8b66hmDAqtwo0qfrMCsE,95415
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=v94a70Lj8Ru5akgXxCVabkmNWFgq3SDRS95Qx5x6GqY,37778
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=GPPump7Kbsl9ECfFhjrPo6Yq2c20z9BytOSKIQFlk8g,19880
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.4.dist-info/licenses/LICENSE,sha256=4lsMW-RCvfVD4_F57wrmpe3vX1xwUk_OAKKmV_XT7Z0,11348
826
- dagster-1.12.4.dist-info/METADATA,sha256=7E0AUSxQ13gPTATcl_bNco3O6PPpcoAzMlsy9AZ9rs0,12221
827
- dagster-1.12.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
828
- dagster-1.12.4.dist-info/entry_points.txt,sha256=D4W0jf1lM8zq82j3DJd9JkZEmHdFz5gkz8ddRzOEzpc,139
829
- dagster-1.12.4.dist-info/top_level.txt,sha256=Gx3NqlMQh6AsfIZaJJXEfep5yh-e9pUxkzOlUV3s6CM,8
830
- dagster-1.12.4.dist-info/RECORD,,
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,,