apache-airflow-providers-standard 1.5.0rc1__py3-none-any.whl → 1.6.0rc1__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.

Potentially problematic release.


This version of apache-airflow-providers-standard might be problematic. Click here for more details.

@@ -29,7 +29,7 @@ from airflow import __version__ as airflow_version
29
29
 
30
30
  __all__ = ["__version__"]
31
31
 
32
- __version__ = "1.5.0"
32
+ __version__ = "1.6.0"
33
33
 
34
34
  if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
35
35
  "2.10.0"
@@ -20,7 +20,11 @@ from airflow import DAG
20
20
  from airflow.providers.standard.operators.empty import EmptyOperator
21
21
  from airflow.providers.standard.operators.trigger_dagrun import TriggerDagRunOperator
22
22
  from airflow.providers.standard.sensors.external_task import ExternalTaskSensor
23
- from airflow.utils.timezone import datetime
23
+
24
+ try:
25
+ from airflow.sdk.timezone import datetime
26
+ except ImportError:
27
+ from airflow.utils.timezone import datetime # type: ignore[no-redef]
24
28
 
25
29
  with DAG(
26
30
  dag_id="example_external_task",
@@ -18,6 +18,7 @@
18
18
  from __future__ import annotations
19
19
 
20
20
  import datetime
21
+ from typing import TYPE_CHECKING
21
22
 
22
23
  import pendulum
23
24
 
@@ -28,6 +29,43 @@ from airflow.providers.standard.operators.hitl import (
28
29
  HITLOperator,
29
30
  )
30
31
  from airflow.sdk import DAG, Param, task
32
+ from airflow.sdk.bases.notifier import BaseNotifier
33
+
34
+ if TYPE_CHECKING:
35
+ from airflow.sdk.definitions.context import Context
36
+
37
+ # [START hitl_tutorial]
38
+
39
+
40
+ class LocalLogNotifier(BaseNotifier):
41
+ """Simple notifier to demonstrate HITL notification without setup any connection."""
42
+
43
+ template_fields = ("message",)
44
+
45
+ def __init__(self, message: str) -> None:
46
+ self.message = message
47
+
48
+ def notify(self, context: Context) -> None:
49
+ self.log.info(self.message)
50
+
51
+
52
+ # [START htil_notifer]
53
+ hitl_request_callback = LocalLogNotifier(
54
+ message="""
55
+ [HITL]
56
+ Subject: {{ task.subject }}
57
+ Body: {{ task.body }}
58
+ Options: {{ task.options }}
59
+ Is Multiple Option: {{ task.multiple }}
60
+ Default Options: {{ task.defaults }}
61
+ Params: {{ task.params }}
62
+ """
63
+ )
64
+ hitl_success_callback = LocalLogNotifier(
65
+ message="{% set task_id = task.task_id -%}{{ ti.xcom_pull(task_ids=task_id) }}"
66
+ )
67
+ hitl_failure_callback = LocalLogNotifier(message="Request to response to '{{ task.subject }}' failed")
68
+ # [END htil_notifer]
31
69
 
32
70
  with DAG(
33
71
  dag_id="example_hitl_operator",
@@ -35,35 +73,83 @@ with DAG(
35
73
  catchup=False,
36
74
  tags=["example", "HITL"],
37
75
  ):
76
+ # [START howto_hitl_entry_operator]
38
77
  wait_for_input = HITLEntryOperator(
39
78
  task_id="wait_for_input",
40
79
  subject="Please provide required information: ",
41
80
  params={"information": Param("", type="string")},
81
+ notifiers=[hitl_request_callback],
82
+ on_success_callback=hitl_success_callback,
83
+ on_failure_callback=hitl_failure_callback,
42
84
  )
85
+ # [END howto_hitl_entry_operator]
43
86
 
87
+ # [START howto_hitl_operator]
44
88
  wait_for_option = HITLOperator(
45
89
  task_id="wait_for_option",
46
- subject="Please choose one option to proceeded: ",
90
+ subject="Please choose one option to proceed: ",
47
91
  options=["option 1", "option 2", "option 3"],
92
+ notifiers=[hitl_request_callback],
93
+ on_success_callback=hitl_success_callback,
94
+ on_failure_callback=hitl_failure_callback,
95
+ )
96
+ # [END howto_hitl_operator]
97
+
98
+ # [START howto_hitl_operator_muliple]
99
+ wait_for_multiple_options = HITLOperator(
100
+ task_id="wait_for_multiple_options",
101
+ subject="Please choose option to proceed: ",
102
+ options=["option 4", "option 5", "option 6"],
103
+ multiple=True,
104
+ notifiers=[hitl_request_callback],
105
+ on_success_callback=hitl_success_callback,
106
+ on_failure_callback=hitl_failure_callback,
107
+ )
108
+ # [END howto_hitl_operator_muliple]
109
+
110
+ # [START howto_hitl_operator_timeout]
111
+ wait_for_default_option = HITLOperator(
112
+ task_id="wait_for_default_option",
113
+ subject="Please choose option to proceed: ",
114
+ options=["option 7", "option 8", "option 9"],
115
+ defaults=["option 7"],
116
+ execution_timeout=datetime.timedelta(seconds=1),
117
+ notifiers=[hitl_request_callback],
118
+ on_success_callback=hitl_success_callback,
119
+ on_failure_callback=hitl_failure_callback,
48
120
  )
121
+ # [END howto_hitl_operator_timeout]
49
122
 
123
+ # [START howto_hitl_approval_operator]
50
124
  valid_input_and_options = ApprovalOperator(
51
125
  task_id="valid_input_and_options",
52
126
  subject="Are the following input and options valid?",
53
127
  body="""
54
- Input: {{ task_instance.xcom_pull(task_ids='wait_for_input', key='return_value')["params_input"]["information"] }}
55
- Option: {{ task_instance.xcom_pull(task_ids='wait_for_option', key='return_value')["chosen_options"] }}
128
+ Input: {{ ti.xcom_pull(task_ids='wait_for_input')["params_input"]["information"] }}
129
+ Option: {{ ti.xcom_pull(task_ids='wait_for_option')["chosen_options"] }}
130
+ Multiple Options: {{ ti.xcom_pull(task_ids='wait_for_option')["chosen_options"] }}
131
+ Timeout Option: {{ ti.xcom_pull(task_ids='wait_for_option')["chosen_options"] }}
56
132
  """,
57
133
  defaults="Reject",
58
134
  execution_timeout=datetime.timedelta(minutes=1),
135
+ notifiers=[hitl_request_callback],
136
+ on_success_callback=hitl_success_callback,
137
+ on_failure_callback=hitl_failure_callback,
59
138
  )
139
+ # [END howto_hitl_approval_operator]
60
140
 
141
+ # [START howto_hitl_branch_operator]
61
142
  choose_a_branch_to_run = HITLBranchOperator(
62
143
  task_id="choose_a_branch_to_run",
63
144
  subject="You're now allowed to proceeded. Please choose one task to run: ",
64
145
  options=["task_1", "task_2", "task_3"],
146
+ notifiers=[hitl_request_callback],
147
+ on_success_callback=hitl_success_callback,
148
+ on_failure_callback=hitl_failure_callback,
65
149
  )
150
+ # [END howto_hitl_branch_operator]
66
151
 
152
+ # [START howto_hitl_workflow]
67
153
  @task
68
154
  def task_1(): ...
69
155
 
@@ -74,8 +160,11 @@ with DAG(
74
160
  def task_3(): ...
75
161
 
76
162
  (
77
- [wait_for_input, wait_for_option]
163
+ [wait_for_input, wait_for_option, wait_for_default_option, wait_for_multiple_options]
78
164
  >> valid_input_and_options
79
165
  >> choose_a_branch_to_run
80
166
  >> [task_1(), task_2(), task_3()]
81
167
  )
168
+ # [END howto_hitl_workflow]
169
+
170
+ # [END hitl_tutorial]
@@ -20,21 +20,23 @@ import logging
20
20
 
21
21
  from airflow.exceptions import AirflowOptionalProviderFeatureException
22
22
  from airflow.providers.standard.version_compat import AIRFLOW_V_3_1_PLUS
23
+ from airflow.sdk.bases.notifier import BaseNotifier
23
24
 
24
25
  if not AIRFLOW_V_3_1_PLUS:
25
26
  raise AirflowOptionalProviderFeatureException("Human in the loop functionality needs Airflow 3.1+.")
26
27
 
27
28
 
28
- from collections.abc import Collection, Mapping
29
- from datetime import datetime, timezone
29
+ from collections.abc import Collection, Mapping, Sequence
30
30
  from typing import TYPE_CHECKING, Any
31
31
 
32
32
  from airflow.providers.standard.exceptions import HITLTimeoutError, HITLTriggerEventError
33
+ from airflow.providers.standard.operators.branch import BranchMixIn
33
34
  from airflow.providers.standard.triggers.hitl import HITLTrigger, HITLTriggerEventSuccessPayload
34
35
  from airflow.providers.standard.utils.skipmixin import SkipMixin
35
36
  from airflow.providers.standard.version_compat import BaseOperator
36
37
  from airflow.sdk.definitions.param import ParamsDict
37
38
  from airflow.sdk.execution_time.hitl import upsert_hitl_detail
39
+ from airflow.sdk.timezone import utcnow
38
40
 
39
41
  if TYPE_CHECKING:
40
42
  from airflow.sdk.definitions.context import Context
@@ -65,6 +67,7 @@ class HITLOperator(BaseOperator):
65
67
  defaults: str | list[str] | None = None,
66
68
  multiple: bool = False,
67
69
  params: ParamsDict | dict[str, Any] | None = None,
70
+ notifiers: Sequence[BaseNotifier] | BaseNotifier | None = None,
68
71
  **kwargs,
69
72
  ) -> None:
70
73
  super().__init__(**kwargs)
@@ -77,6 +80,9 @@ class HITLOperator(BaseOperator):
77
80
  self.multiple = multiple
78
81
 
79
82
  self.params: ParamsDict = params if isinstance(params, ParamsDict) else ParamsDict(params or {})
83
+ self.notifiers: Sequence[BaseNotifier] = (
84
+ [notifiers] if isinstance(notifiers, BaseNotifier) else notifiers or []
85
+ )
80
86
 
81
87
  self.validate_defaults()
82
88
 
@@ -107,11 +113,16 @@ class HITLOperator(BaseOperator):
107
113
  multiple=self.multiple,
108
114
  params=self.serialized_params,
109
115
  )
116
+
110
117
  if self.execution_timeout:
111
- timeout_datetime = datetime.now(timezone.utc) + self.execution_timeout
118
+ timeout_datetime = utcnow() + self.execution_timeout
112
119
  else:
113
120
  timeout_datetime = None
121
+
114
122
  self.log.info("Waiting for response")
123
+ for notifier in self.notifiers:
124
+ notifier(context)
125
+
115
126
  # Defer the Human-in-the-loop response checking process to HITLTrigger
116
127
  self.defer(
117
128
  trigger=HITLTrigger(
@@ -170,6 +181,9 @@ class ApprovalOperator(HITLOperator, SkipMixin):
170
181
 
171
182
  FIXED_ARGS = ["options", "multiple"]
172
183
 
184
+ APPROVE = "Approve"
185
+ REJECT = "Reject"
186
+
173
187
  def __init__(self, ignore_downstream_trigger_rules: bool = False, **kwargs) -> None:
174
188
  for arg in self.FIXED_ARGS:
175
189
  if arg in kwargs:
@@ -177,13 +191,17 @@ class ApprovalOperator(HITLOperator, SkipMixin):
177
191
 
178
192
  self.ignore_downstream_trigger_rules = ignore_downstream_trigger_rules
179
193
 
180
- super().__init__(options=["Approve", "Reject"], multiple=False, **kwargs)
194
+ super().__init__(
195
+ options=[self.APPROVE, self.REJECT],
196
+ multiple=False,
197
+ **kwargs,
198
+ )
181
199
 
182
200
  def execute_complete(self, context: Context, event: dict[str, Any]) -> Any:
183
201
  ret = super().execute_complete(context=context, event=event)
184
202
 
185
203
  chosen_option = ret["chosen_options"][0]
186
- if chosen_option == "Approve":
204
+ if chosen_option == self.APPROVE:
187
205
  self.log.info("Approved. Proceeding with downstream tasks...")
188
206
  return ret
189
207
 
@@ -211,24 +229,27 @@ class ApprovalOperator(HITLOperator, SkipMixin):
211
229
  return ret
212
230
 
213
231
 
214
- class HITLBranchOperator(HITLOperator):
232
+ class HITLBranchOperator(HITLOperator, BranchMixIn):
215
233
  """BranchOperator based on Human-in-the-loop Response."""
216
234
 
217
- def __init__(self, **kwargs) -> None:
218
- super().__init__(**kwargs)
235
+ inherits_from_skipmixin = True
219
236
 
220
- def execute_complete(self, context: Context, event: dict[str, Any]) -> None:
221
- raise NotImplementedError
237
+ def execute_complete(self, context: Context, event: dict[str, Any]) -> Any:
238
+ ret = super().execute_complete(context=context, event=event)
239
+ chosen_options = ret["chosen_options"]
240
+ return self.do_branch(context=context, branches_to_execute=chosen_options)
222
241
 
223
242
 
224
243
  class HITLEntryOperator(HITLOperator):
225
244
  """Human-in-the-loop Operator that is used to accept user input through TriggerForm."""
226
245
 
246
+ OK = "OK"
247
+
227
248
  def __init__(self, **kwargs) -> None:
228
249
  if "options" not in kwargs:
229
- kwargs["options"] = ["OK"]
250
+ kwargs["options"] = [self.OK]
230
251
 
231
252
  if "defaults" not in kwargs:
232
- kwargs["defaults"] = ["OK"]
253
+ kwargs["defaults"] = [self.OK]
233
254
 
234
255
  super().__init__(**kwargs)
@@ -42,7 +42,10 @@ except ImportError:
42
42
  timeout: datetime.timedelta | None = None
43
43
 
44
44
 
45
- from airflow.utils import timezone
45
+ try:
46
+ from airflow.sdk import timezone
47
+ except ImportError:
48
+ from airflow.utils import timezone # type: ignore[attr-defined,no-redef]
46
49
 
47
50
  if TYPE_CHECKING:
48
51
  try:
@@ -116,9 +119,11 @@ class TimeSensor(BaseSensorOperator):
116
119
  ),
117
120
  method_name="execute_complete",
118
121
  )
122
+ else:
123
+ super().execute(context)
119
124
 
120
- def execute_complete(self, context: Context) -> None:
121
- return
125
+ def execute_complete(self, context: Context, event: Any = None) -> None:
126
+ return None
122
127
 
123
128
  def poke(self, context: Context) -> bool:
124
129
  self.log.info("Checking if the time (%s) has come", self.target_datetime)
@@ -34,8 +34,8 @@ from airflow.sdk.execution_time.hitl import (
34
34
  get_hitl_detail_content_detail,
35
35
  update_htil_detail_response,
36
36
  )
37
+ from airflow.sdk.timezone import utcnow
37
38
  from airflow.triggers.base import BaseTrigger, TriggerEvent
38
- from airflow.utils import timezone
39
39
 
40
40
 
41
41
  class HITLTriggerEventSuccessPayload(TypedDict, total=False):
@@ -43,6 +43,7 @@ class HITLTriggerEventSuccessPayload(TypedDict, total=False):
43
43
 
44
44
  chosen_options: list[str]
45
45
  params_input: dict[str, Any]
46
+ timedout: bool
46
47
 
47
48
 
48
49
  class HITLTriggerEventFailurePayload(TypedDict):
@@ -96,7 +97,7 @@ class HITLTrigger(BaseTrigger):
96
97
  async def run(self) -> AsyncIterator[TriggerEvent]:
97
98
  """Loop until the Human-in-the-loop response received or timeout reached."""
98
99
  while True:
99
- if self.timeout_datetime and self.timeout_datetime < timezone.utcnow():
100
+ if self.timeout_datetime and self.timeout_datetime < utcnow():
100
101
  if self.defaults is None:
101
102
  yield TriggerEvent(
102
103
  HITLTriggerEventFailurePayload(
@@ -111,21 +112,28 @@ class HITLTrigger(BaseTrigger):
111
112
  chosen_options=self.defaults,
112
113
  params_input=self.params,
113
114
  )
115
+ self.log.info(
116
+ "[HITL] timeout reached before receiving response, fallback to default %s", self.defaults
117
+ )
114
118
  yield TriggerEvent(
115
119
  HITLTriggerEventSuccessPayload(
116
120
  chosen_options=self.defaults,
117
121
  params_input=self.params,
122
+ timedout=True,
118
123
  )
119
124
  )
120
125
  return
121
126
 
122
127
  resp = await sync_to_async(get_hitl_detail_content_detail)(ti_id=self.ti_id)
123
128
  if resp.response_received and resp.chosen_options:
124
- self.log.info("Responded by %s at %s", resp.user_id, resp.response_at)
129
+ self.log.info(
130
+ "[HITL] user=%s options=%s at %s", resp.user_id, resp.chosen_options, resp.response_at
131
+ )
125
132
  yield TriggerEvent(
126
133
  HITLTriggerEventSuccessPayload(
127
134
  chosen_options=resp.chosen_options,
128
135
  params_input=resp.params_input,
136
+ timedout=False,
129
137
  )
130
138
  )
131
139
  return
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apache-airflow-providers-standard
3
- Version: 1.5.0rc1
3
+ Version: 1.6.0rc1
4
4
  Summary: Provider package apache-airflow-providers-standard for Apache Airflow
5
5
  Keywords: airflow-provider,standard,airflow,integration
6
6
  Author-email: Apache Software Foundation <dev@airflow.apache.org>
@@ -22,8 +22,8 @@ Classifier: Programming Language :: Python :: 3.13
22
22
  Classifier: Topic :: System :: Monitoring
23
23
  Requires-Dist: apache-airflow>=2.10.0rc1
24
24
  Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
25
- Project-URL: Changelog, https://airflow.staged.apache.org/docs/apache-airflow-providers-standard/1.5.0/changelog.html
26
- Project-URL: Documentation, https://airflow.staged.apache.org/docs/apache-airflow-providers-standard/1.5.0
25
+ Project-URL: Changelog, https://airflow.staged.apache.org/docs/apache-airflow-providers-standard/1.6.0/changelog.html
26
+ Project-URL: Documentation, https://airflow.staged.apache.org/docs/apache-airflow-providers-standard/1.6.0
27
27
  Project-URL: Mastodon, https://fosstodon.org/@airflow
28
28
  Project-URL: Slack Chat, https://s.apache.org/airflow-slack
29
29
  Project-URL: Source Code, https://github.com/apache/airflow
@@ -54,7 +54,7 @@ Project-URL: YouTube, https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/
54
54
 
55
55
  Package ``apache-airflow-providers-standard``
56
56
 
57
- Release: ``1.5.0``
57
+ Release: ``1.6.0``
58
58
 
59
59
  Release Date: ``|PypiReleaseDate|``
60
60
 
@@ -68,7 +68,7 @@ This is a provider package for ``standard`` provider. All classes for this provi
68
68
  are in ``airflow.providers.standard`` python package.
69
69
 
70
70
  You can find package information and changelog for the provider
71
- in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-standard/1.5.0/>`_.
71
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-standard/1.6.0/>`_.
72
72
 
73
73
  Installation
74
74
  ------------
@@ -89,5 +89,5 @@ PIP package Version required
89
89
  ================== ==================
90
90
 
91
91
  The changelog for the provider package can be found in the
92
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-standard/1.5.0/changelog.html>`_.
92
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-standard/1.6.0/changelog.html>`_.
93
93
 
@@ -1,5 +1,5 @@
1
1
  airflow/providers/standard/LICENSE,sha256=gXPVwptPlW1TJ4HSuG5OMPg-a3h43OGMkZRR1rpwfJA,10850
2
- airflow/providers/standard/__init__.py,sha256=aB_JSWWForH2rLR28WX3MxK740faq6K9vg564SXWBVQ,1497
2
+ airflow/providers/standard/__init__.py,sha256=HRU9nnD6x9Bv6Wqk4LgRJeoJvuUNVQQMsRz1FiSBuSc,1497
3
3
  airflow/providers/standard/exceptions.py,sha256=8CTMCs1xVk_06piBoyP3pKX6j29riukL8V2V7miPgEU,2269
4
4
  airflow/providers/standard/get_provider_info.py,sha256=jhENLvqCXj0mzBPmJeAvPj7XWaaNuxPLhHVVA-9rqzs,7132
5
5
  airflow/providers/standard/version_compat.py,sha256=03HDmI6x17lcPHboL-OhjQ3TrIKuLS2JUu3iwYGh-iM,2612
@@ -22,8 +22,8 @@ airflow/providers/standard/example_dags/example_branch_operator.py,sha256=c4dr2d
22
22
  airflow/providers/standard/example_dags/example_branch_operator_decorator.py,sha256=mF_87Kqxhui6sCsWvBXJ6m_w9bUoeqrA_rUVJuyIeq4,4801
23
23
  airflow/providers/standard/example_dags/example_external_task_child_deferrable.py,sha256=o-ji3leJTBjiChEWoqVu4ykz1YVYUd8-ApmZwHFcNc8,1233
24
24
  airflow/providers/standard/example_dags/example_external_task_marker_dag.py,sha256=gssBjlfrGMDLZxTYOxo8ihXLbJ-3Uu31QodINGFWYNU,3650
25
- airflow/providers/standard/example_dags/example_external_task_parent_deferrable.py,sha256=gPJ3VFX4b1drwW_-C4q-3cWFTDM2lupeXrwR6n2lsJE,2070
26
- airflow/providers/standard/example_dags/example_hitl_operator.py,sha256=Z1CIrCzL7jaRG9N-nl3asH0_Gt-yMRU2LJlrknst28c,2587
25
+ airflow/providers/standard/example_dags/example_external_task_parent_deferrable.py,sha256=8R1EqL0x1SgxcJtOb2EO4_NXmFgxiM-a0wPilDf7fis,2172
26
+ airflow/providers/standard/example_dags/example_hitl_operator.py,sha256=i6UC0IX8s5anBx4AStd3-lPYGoguOxscIXl94Q4BdRw,5745
27
27
  airflow/providers/standard/example_dags/example_latest_only.py,sha256=ac9WpLMWLzyuxZks74t3HojS7vRG2gynmQfGm13gwOI,1456
28
28
  airflow/providers/standard/example_dags/example_python_decorator.py,sha256=jveqPOw1GZzD3Z37_rYc8Q8hcyx8vCNjgetpO_P6qmg,4281
29
29
  airflow/providers/standard/example_dags/example_python_operator.py,sha256=3L6CZHK2Fb7zmA9tDhZ5QaEe38WJYlS4l35Gc7xJAoE,4761
@@ -44,7 +44,7 @@ airflow/providers/standard/operators/bash.py,sha256=yzNbi20dp6PWJzXZqJ05gyMsdb6-
44
44
  airflow/providers/standard/operators/branch.py,sha256=No3JoaqPjEAu7QlVf-20nzli0yYKbYorjcx885i5eeg,3970
45
45
  airflow/providers/standard/operators/datetime.py,sha256=bYDdbfAyAlEXRRHjOgB06UhgDum6SPdd5I3u-ylPSaw,5005
46
46
  airflow/providers/standard/operators/empty.py,sha256=BTeZ4KRykaEHLZigSBkevcStCrbPdQpWDMnO3ZdtZqw,1338
47
- airflow/providers/standard/operators/hitl.py,sha256=clGMwgBTIXQJqGnBe6K5QRafSKQLHgDavZgt15Kg1fg,9232
47
+ airflow/providers/standard/operators/hitl.py,sha256=4lutRaQDttqED1cWDkGrTnYPORBXEdYJIiGOhGPO9mo,9893
48
48
  airflow/providers/standard/operators/latest_only.py,sha256=VkU-nAI8QbIrmeiv4wYXBcZF0yKMkcFapormg0J5-As,5110
49
49
  airflow/providers/standard/operators/python.py,sha256=XPrjFzIY_BrtDvG1-KPrWo_4RmALSmage0p_Cygsks4,53788
50
50
  airflow/providers/standard/operators/smooth.py,sha256=IMs5GjM42XEiroksIZ5flGQgxfRUbXZXCWxpshVinYQ,1396
@@ -56,13 +56,13 @@ airflow/providers/standard/sensors/date_time.py,sha256=W4lN-EXCIiJkPf6FKvJ4yx7X9
56
56
  airflow/providers/standard/sensors/external_task.py,sha256=lDEg2Zbwp79f6VV6uH3PXI-NiHbL4IMAO4z-1VDl4gA,28695
57
57
  airflow/providers/standard/sensors/filesystem.py,sha256=jDgxZQ4WXRv1PSjc2o4K0Iq_AxnaPw7yIUnafK_VpaM,6050
58
58
  airflow/providers/standard/sensors/python.py,sha256=rpJa61FUjQRJwQwLdHpprnLdVW78rB4svhbw1U-LiWw,3408
59
- airflow/providers/standard/sensors/time.py,sha256=kam9KWlPahuqFo3u7CAGnQk_DBYSKawBr5MDPCGwb6g,5091
59
+ airflow/providers/standard/sensors/time.py,sha256=9kfamlG4mNJ1T39rOrhuAW41NiXFPP6RxU1ytiTIsLs,5271
60
60
  airflow/providers/standard/sensors/time_delta.py,sha256=ggDSna-m_scLFks9zx1LoC64jQBjw7ZQqH7n96UU2BQ,7579
61
61
  airflow/providers/standard/sensors/weekday.py,sha256=sKDQ7xC9c32DZxaGNIjqmW6HXE4hIvKC71Kt-_d9SG8,4470
62
62
  airflow/providers/standard/triggers/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
63
63
  airflow/providers/standard/triggers/external_task.py,sha256=R2Wsd21pw9_gGTs9XuHafylt65hMVPisz2g6vnpLJ4o,11521
64
64
  airflow/providers/standard/triggers/file.py,sha256=2i8-RwSjEgdOwQNcHCqLmSdpE3Ehqg4GQJ8nE3-fHxo,4886
65
- airflow/providers/standard/triggers/hitl.py,sha256=ndBQdeiVqaehmChyryr1NX6JXBdGzx8D8l4TSIODLT8,4805
65
+ airflow/providers/standard/triggers/hitl.py,sha256=39xqF8om6hLJPhcQ6t4q_ZYhrQTAfC9bwitu1cjbb7k,5127
66
66
  airflow/providers/standard/triggers/temporal.py,sha256=AlSdf3iNUMrdQmMlKHi0Ms-D_OU7hIkLFsqj23mpR3Q,4446
67
67
  airflow/providers/standard/utils/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
68
68
  airflow/providers/standard/utils/python_virtualenv.py,sha256=R42AUzD6WK9TV36gRir39jRvTq8zYR5jScFLVWtUVeM,8038
@@ -70,7 +70,7 @@ airflow/providers/standard/utils/python_virtualenv_script.jinja2,sha256=3Z334hVq
70
70
  airflow/providers/standard/utils/sensor_helper.py,sha256=PNIETsl_a4BkmOypFfHdpP0VuTkC6eWKUDuwnNVaWsA,5000
71
71
  airflow/providers/standard/utils/skipmixin.py,sha256=PMrP2vtr5Sn6eCVslAqmEpY6Rgo6ZyfR73LPXS5NGVA,8015
72
72
  airflow/providers/standard/utils/weekday.py,sha256=ySDrIkWv-lqqxURo9E98IGInDqERec2O4y9o2hQTGiQ,2685
73
- apache_airflow_providers_standard-1.5.0rc1.dist-info/entry_points.txt,sha256=mW2YRh3mVdZdaP5-iGSNgmcCh3YYdALIn28BCLBZZ40,104
74
- apache_airflow_providers_standard-1.5.0rc1.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
75
- apache_airflow_providers_standard-1.5.0rc1.dist-info/METADATA,sha256=v2D-7ISWm1_2RsttJ1Anwn8lTJO2bVGFUJwW20Bwt_w,3847
76
- apache_airflow_providers_standard-1.5.0rc1.dist-info/RECORD,,
73
+ apache_airflow_providers_standard-1.6.0rc1.dist-info/entry_points.txt,sha256=mW2YRh3mVdZdaP5-iGSNgmcCh3YYdALIn28BCLBZZ40,104
74
+ apache_airflow_providers_standard-1.6.0rc1.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
75
+ apache_airflow_providers_standard-1.6.0rc1.dist-info/METADATA,sha256=xurzzpBE-BIUJlhM1DAbT0xnfd5haxn3FHoXhLadHJc,3847
76
+ apache_airflow_providers_standard-1.6.0rc1.dist-info/RECORD,,