apache-airflow-providers-standard 1.7.0__py3-none-any.whl → 1.8.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.
- airflow/providers/standard/__init__.py +1 -1
- airflow/providers/standard/example_dags/example_bash_decorator.py +1 -0
- airflow/providers/standard/example_dags/example_hitl_operator.py +1 -0
- airflow/providers/standard/exceptions.py +5 -1
- airflow/providers/standard/operators/hitl.py +42 -6
- airflow/providers/standard/triggers/hitl.py +49 -5
- {apache_airflow_providers_standard-1.7.0.dist-info → apache_airflow_providers_standard-1.8.0rc1.dist-info}/METADATA +7 -7
- {apache_airflow_providers_standard-1.7.0.dist-info → apache_airflow_providers_standard-1.8.0rc1.dist-info}/RECORD +10 -10
- {apache_airflow_providers_standard-1.7.0.dist-info → apache_airflow_providers_standard-1.8.0rc1.dist-info}/WHEEL +0 -0
- {apache_airflow_providers_standard-1.7.0.dist-info → apache_airflow_providers_standard-1.8.0rc1.dist-info}/entry_points.txt +0 -0
|
@@ -29,7 +29,7 @@ from airflow import __version__ as airflow_version
|
|
|
29
29
|
|
|
30
30
|
__all__ = ["__version__"]
|
|
31
31
|
|
|
32
|
-
__version__ = "1.
|
|
32
|
+
__version__ = "1.8.0"
|
|
33
33
|
|
|
34
34
|
if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
|
|
35
35
|
"2.10.0"
|
|
@@ -57,9 +57,13 @@ class DuplicateStateError(AirflowExternalTaskSensorException):
|
|
|
57
57
|
"""Raised when duplicate states are provided across allowed, skipped and failed states."""
|
|
58
58
|
|
|
59
59
|
|
|
60
|
-
class HITLTriggerEventError(
|
|
60
|
+
class HITLTriggerEventError(Exception):
|
|
61
61
|
"""Raised when TriggerEvent contains error."""
|
|
62
62
|
|
|
63
63
|
|
|
64
64
|
class HITLTimeoutError(HITLTriggerEventError):
|
|
65
65
|
"""Raised when HITLOperator timeouts."""
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
class HITLRejectException(AirflowException):
|
|
69
|
+
"""Raised when an ApprovalOperator receives a "Reject" response when fail_on_reject is set to True."""
|
|
@@ -29,7 +29,7 @@ from typing import TYPE_CHECKING, Any
|
|
|
29
29
|
from urllib.parse import ParseResult, urlencode, urlparse, urlunparse
|
|
30
30
|
|
|
31
31
|
from airflow.configuration import conf
|
|
32
|
-
from airflow.providers.standard.exceptions import HITLTimeoutError, HITLTriggerEventError
|
|
32
|
+
from airflow.providers.standard.exceptions import HITLRejectException, HITLTimeoutError, HITLTriggerEventError
|
|
33
33
|
from airflow.providers.standard.operators.branch import BranchMixIn
|
|
34
34
|
from airflow.providers.standard.triggers.hitl import HITLTrigger, HITLTriggerEventSuccessPayload
|
|
35
35
|
from airflow.providers.standard.utils.skipmixin import SkipMixin
|
|
@@ -41,6 +41,7 @@ from airflow.sdk.timezone import utcnow
|
|
|
41
41
|
|
|
42
42
|
if TYPE_CHECKING:
|
|
43
43
|
from airflow.sdk.definitions.context import Context
|
|
44
|
+
from airflow.sdk.execution_time.hitl import HITLUser
|
|
44
45
|
from airflow.sdk.types import RuntimeTaskInstanceProtocol
|
|
45
46
|
|
|
46
47
|
|
|
@@ -70,7 +71,7 @@ class HITLOperator(BaseOperator):
|
|
|
70
71
|
multiple: bool = False,
|
|
71
72
|
params: ParamsDict | dict[str, Any] | None = None,
|
|
72
73
|
notifiers: Sequence[BaseNotifier] | BaseNotifier | None = None,
|
|
73
|
-
|
|
74
|
+
assigned_users: HITLUser | list[HITLUser] | None = None,
|
|
74
75
|
**kwargs,
|
|
75
76
|
) -> None:
|
|
76
77
|
super().__init__(**kwargs)
|
|
@@ -86,7 +87,7 @@ class HITLOperator(BaseOperator):
|
|
|
86
87
|
self.notifiers: Sequence[BaseNotifier] = (
|
|
87
88
|
[notifiers] if isinstance(notifiers, BaseNotifier) else notifiers or []
|
|
88
89
|
)
|
|
89
|
-
self.
|
|
90
|
+
self.assigned_users = [assigned_users] if isinstance(assigned_users, dict) else assigned_users
|
|
90
91
|
|
|
91
92
|
self.validate_options()
|
|
92
93
|
self.validate_params()
|
|
@@ -138,7 +139,7 @@ class HITLOperator(BaseOperator):
|
|
|
138
139
|
defaults=self.defaults,
|
|
139
140
|
multiple=self.multiple,
|
|
140
141
|
params=self.serialized_params,
|
|
141
|
-
|
|
142
|
+
assigned_users=self.assigned_users,
|
|
142
143
|
)
|
|
143
144
|
|
|
144
145
|
if self.execution_timeout:
|
|
@@ -178,10 +179,12 @@ class HITLOperator(BaseOperator):
|
|
|
178
179
|
return HITLTriggerEventSuccessPayload(
|
|
179
180
|
chosen_options=chosen_options,
|
|
180
181
|
params_input=params_input,
|
|
182
|
+
responded_at=event["responded_at"],
|
|
183
|
+
responded_by_user=event["responded_by_user"],
|
|
181
184
|
)
|
|
182
185
|
|
|
183
186
|
def process_trigger_event_error(self, event: dict[str, Any]) -> None:
|
|
184
|
-
if "error_type" == "timeout":
|
|
187
|
+
if event["error_type"] == "timeout":
|
|
185
188
|
raise HITLTimeoutError(event)
|
|
186
189
|
|
|
187
190
|
raise HITLTriggerEventError(event)
|
|
@@ -300,12 +303,42 @@ class ApprovalOperator(HITLOperator, SkipMixin):
|
|
|
300
303
|
APPROVE = "Approve"
|
|
301
304
|
REJECT = "Reject"
|
|
302
305
|
|
|
303
|
-
def __init__(
|
|
306
|
+
def __init__(
|
|
307
|
+
self,
|
|
308
|
+
*,
|
|
309
|
+
ignore_downstream_trigger_rules: bool = False,
|
|
310
|
+
fail_on_reject: bool = False,
|
|
311
|
+
**kwargs,
|
|
312
|
+
) -> None:
|
|
313
|
+
"""
|
|
314
|
+
Human-in-the-loop Operator for simple approval workflows.
|
|
315
|
+
|
|
316
|
+
This operator presents the user with two fixed options: "Approve" and "Reject".
|
|
317
|
+
|
|
318
|
+
Behavior:
|
|
319
|
+
- "Approve": Downstream tasks execute as normal.
|
|
320
|
+
- "Reject":
|
|
321
|
+
- Downstream tasks are skipped according to the `ignore_downstream_trigger_rules` setting.
|
|
322
|
+
- If `fail_on_reject=True`, the task fails instead of only skipping downstream tasks.
|
|
323
|
+
|
|
324
|
+
Warning:
|
|
325
|
+
Using `fail_on_reject=True` is generally discouraged. A HITLOperator's role is to collect
|
|
326
|
+
human input, and receiving any response—including "Reject"—indicates the task succeeded.
|
|
327
|
+
Treating "Reject" as a task failure mixes human decision outcomes with Airflow task
|
|
328
|
+
success/failure states.
|
|
329
|
+
Only use this option if you explicitly intend for a "Reject" response to fail the task.
|
|
330
|
+
|
|
331
|
+
Args:
|
|
332
|
+
ignore_downstream_trigger_rules: If True, skips all downstream tasks regardless of trigger rules.
|
|
333
|
+
fail_on_reject: If True, the task fails when "Reject" is selected. Generally discouraged.
|
|
334
|
+
Read the warning carefully before using.
|
|
335
|
+
"""
|
|
304
336
|
for arg in self.FIXED_ARGS:
|
|
305
337
|
if arg in kwargs:
|
|
306
338
|
raise ValueError(f"Passing {arg} to ApprovalOperator is not allowed.")
|
|
307
339
|
|
|
308
340
|
self.ignore_downstream_trigger_rules = ignore_downstream_trigger_rules
|
|
341
|
+
self.fail_on_reject = fail_on_reject
|
|
309
342
|
|
|
310
343
|
super().__init__(
|
|
311
344
|
options=[self.APPROVE, self.REJECT],
|
|
@@ -321,6 +354,9 @@ class ApprovalOperator(HITLOperator, SkipMixin):
|
|
|
321
354
|
self.log.info("Approved. Proceeding with downstream tasks...")
|
|
322
355
|
return ret
|
|
323
356
|
|
|
357
|
+
if self.fail_on_reject and chosen_option == self.REJECT:
|
|
358
|
+
raise HITLRejectException('Receive "Reject"')
|
|
359
|
+
|
|
324
360
|
if not self.downstream_task_ids:
|
|
325
361
|
self.log.info("No downstream tasks; nothing to do.")
|
|
326
362
|
return ret
|
|
@@ -25,12 +25,13 @@ if not AIRFLOW_V_3_1_PLUS:
|
|
|
25
25
|
import asyncio
|
|
26
26
|
from collections.abc import AsyncIterator
|
|
27
27
|
from datetime import datetime
|
|
28
|
-
from typing import Any, Literal, TypedDict
|
|
28
|
+
from typing import TYPE_CHECKING, Any, Literal, TypedDict
|
|
29
29
|
from uuid import UUID
|
|
30
30
|
|
|
31
31
|
from asgiref.sync import sync_to_async
|
|
32
32
|
|
|
33
33
|
from airflow.sdk.execution_time.hitl import (
|
|
34
|
+
HITLUser,
|
|
34
35
|
get_hitl_detail_content_detail,
|
|
35
36
|
update_hitl_detail_response,
|
|
36
37
|
)
|
|
@@ -43,6 +44,8 @@ class HITLTriggerEventSuccessPayload(TypedDict, total=False):
|
|
|
43
44
|
|
|
44
45
|
chosen_options: list[str]
|
|
45
46
|
params_input: dict[str, Any]
|
|
47
|
+
responded_by_user: HITLUser | None
|
|
48
|
+
responded_at: datetime
|
|
46
49
|
timedout: bool
|
|
47
50
|
|
|
48
51
|
|
|
@@ -98,6 +101,35 @@ class HITLTrigger(BaseTrigger):
|
|
|
98
101
|
"""Loop until the Human-in-the-loop response received or timeout reached."""
|
|
99
102
|
while True:
|
|
100
103
|
if self.timeout_datetime and self.timeout_datetime < utcnow():
|
|
104
|
+
# Fetch latest HITL detail before fallback
|
|
105
|
+
resp = await sync_to_async(get_hitl_detail_content_detail)(ti_id=self.ti_id)
|
|
106
|
+
# Response already received, yield success and exit
|
|
107
|
+
if resp.response_received and resp.chosen_options:
|
|
108
|
+
if TYPE_CHECKING:
|
|
109
|
+
assert resp.responded_by_user is not None
|
|
110
|
+
assert resp.responded_at is not None
|
|
111
|
+
|
|
112
|
+
self.log.info(
|
|
113
|
+
"[HITL] responded_by=%s (id=%s) options=%s at %s (timeout fallback skipped)",
|
|
114
|
+
resp.responded_by_user.name,
|
|
115
|
+
resp.responded_by_user.id,
|
|
116
|
+
resp.chosen_options,
|
|
117
|
+
resp.responded_at,
|
|
118
|
+
)
|
|
119
|
+
yield TriggerEvent(
|
|
120
|
+
HITLTriggerEventSuccessPayload(
|
|
121
|
+
chosen_options=resp.chosen_options,
|
|
122
|
+
params_input=resp.params_input or {},
|
|
123
|
+
responded_at=resp.responded_at,
|
|
124
|
+
responded_by_user=HITLUser(
|
|
125
|
+
id=resp.responded_by_user.id,
|
|
126
|
+
name=resp.responded_by_user.name,
|
|
127
|
+
),
|
|
128
|
+
timedout=False,
|
|
129
|
+
)
|
|
130
|
+
)
|
|
131
|
+
return
|
|
132
|
+
|
|
101
133
|
if self.defaults is None:
|
|
102
134
|
yield TriggerEvent(
|
|
103
135
|
HITLTriggerEventFailurePayload(
|
|
@@ -107,11 +139,13 @@ class HITLTrigger(BaseTrigger):
|
|
|
107
139
|
)
|
|
108
140
|
return
|
|
109
141
|
|
|
110
|
-
await sync_to_async(update_hitl_detail_response)(
|
|
142
|
+
resp = await sync_to_async(update_hitl_detail_response)(
|
|
111
143
|
ti_id=self.ti_id,
|
|
112
144
|
chosen_options=self.defaults,
|
|
113
145
|
params_input=self.params,
|
|
114
146
|
)
|
|
147
|
+
if TYPE_CHECKING:
|
|
148
|
+
assert resp.responded_at is not None
|
|
115
149
|
self.log.info(
|
|
116
150
|
"[HITL] timeout reached before receiving response, fallback to default %s", self.defaults
|
|
117
151
|
)
|
|
@@ -119,6 +153,8 @@ class HITLTrigger(BaseTrigger):
|
|
|
119
153
|
HITLTriggerEventSuccessPayload(
|
|
120
154
|
chosen_options=self.defaults,
|
|
121
155
|
params_input=self.params,
|
|
156
|
+
responded_by_user=None,
|
|
157
|
+
responded_at=resp.responded_at,
|
|
122
158
|
timedout=True,
|
|
123
159
|
)
|
|
124
160
|
)
|
|
@@ -126,17 +162,25 @@ class HITLTrigger(BaseTrigger):
|
|
|
126
162
|
|
|
127
163
|
resp = await sync_to_async(get_hitl_detail_content_detail)(ti_id=self.ti_id)
|
|
128
164
|
if resp.response_received and resp.chosen_options:
|
|
165
|
+
if TYPE_CHECKING:
|
|
166
|
+
assert resp.responded_by_user is not None
|
|
167
|
+
assert resp.responded_at is not None
|
|
129
168
|
self.log.info(
|
|
130
169
|
"[HITL] responded_by=%s (id=%s) options=%s at %s",
|
|
131
|
-
resp.
|
|
132
|
-
resp.
|
|
170
|
+
resp.responded_by_user.name,
|
|
171
|
+
resp.responded_by_user.id,
|
|
133
172
|
resp.chosen_options,
|
|
134
|
-
resp.
|
|
173
|
+
resp.responded_at,
|
|
135
174
|
)
|
|
136
175
|
yield TriggerEvent(
|
|
137
176
|
HITLTriggerEventSuccessPayload(
|
|
138
177
|
chosen_options=resp.chosen_options,
|
|
139
178
|
params_input=resp.params_input or {},
|
|
179
|
+
responded_at=resp.responded_at,
|
|
180
|
+
responded_by_user=HITLUser(
|
|
181
|
+
id=resp.responded_by_user.id,
|
|
182
|
+
name=resp.responded_by_user.name,
|
|
183
|
+
),
|
|
140
184
|
timedout=False,
|
|
141
185
|
)
|
|
142
186
|
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: apache-airflow-providers-standard
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.8.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>
|
|
@@ -20,10 +20,10 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.13
|
|
22
22
|
Classifier: Topic :: System :: Monitoring
|
|
23
|
-
Requires-Dist: apache-airflow>=2.10.
|
|
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.apache.org/docs/apache-airflow-providers-standard/1.
|
|
26
|
-
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-standard/1.
|
|
25
|
+
Project-URL: Changelog, https://airflow.staged.apache.org/docs/apache-airflow-providers-standard/1.8.0/changelog.html
|
|
26
|
+
Project-URL: Documentation, https://airflow.staged.apache.org/docs/apache-airflow-providers-standard/1.8.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.
|
|
57
|
+
Release: ``1.8.0``
|
|
58
58
|
|
|
59
59
|
|
|
60
60
|
Airflow Standard Provider
|
|
@@ -67,7 +67,7 @@ This is a provider package for ``standard`` provider. All classes for this provi
|
|
|
67
67
|
are in ``airflow.providers.standard`` python package.
|
|
68
68
|
|
|
69
69
|
You can find package information and changelog for the provider
|
|
70
|
-
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-standard/1.
|
|
70
|
+
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-standard/1.8.0/>`_.
|
|
71
71
|
|
|
72
72
|
Installation
|
|
73
73
|
------------
|
|
@@ -88,5 +88,5 @@ PIP package Version required
|
|
|
88
88
|
================== ==================
|
|
89
89
|
|
|
90
90
|
The changelog for the provider package can be found in the
|
|
91
|
-
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-standard/1.
|
|
91
|
+
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-standard/1.8.0/changelog.html>`_.
|
|
92
92
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
airflow/providers/standard/LICENSE,sha256=gXPVwptPlW1TJ4HSuG5OMPg-a3h43OGMkZRR1rpwfJA,10850
|
|
2
|
-
airflow/providers/standard/__init__.py,sha256=
|
|
3
|
-
airflow/providers/standard/exceptions.py,sha256=
|
|
2
|
+
airflow/providers/standard/__init__.py,sha256=LOW3Un9JxsKQy3ZmcKa-xKq5MZnEhCNCBzws_pLaAeI,1497
|
|
3
|
+
airflow/providers/standard/exceptions.py,sha256=m2Ryv36yrzAk8xMIA4lhR11n1gA1CKPFwRok8ksl_tk,2416
|
|
4
4
|
airflow/providers/standard/get_provider_info.py,sha256=jhENLvqCXj0mzBPmJeAvPj7XWaaNuxPLhHVVA-9rqzs,7132
|
|
5
5
|
airflow/providers/standard/version_compat.py,sha256=pWRfOwwGUd_uIfch0eiT5vOgwaA5rvohtW5Q46orG98,2891
|
|
6
6
|
airflow/providers/standard/decorators/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
|
|
@@ -14,7 +14,7 @@ airflow/providers/standard/decorators/python_virtualenv.py,sha256=_8Ir-9tt1Ru5rH
|
|
|
14
14
|
airflow/providers/standard/decorators/sensor.py,sha256=BEcTdFUrfiFnLLZN6Uqtiqqq6ScGRVg9JkZYZk4sc-U,3230
|
|
15
15
|
airflow/providers/standard/decorators/short_circuit.py,sha256=zUZgcVDrZXXU_cOhvkxGJrSUsC0oD1HAGPNVDD3U2QM,2533
|
|
16
16
|
airflow/providers/standard/example_dags/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
|
|
17
|
-
airflow/providers/standard/example_dags/example_bash_decorator.py,sha256=
|
|
17
|
+
airflow/providers/standard/example_dags/example_bash_decorator.py,sha256=B2F_AHzdjucrm0zx7osc4JQjWklXgmY7jps8Y1r5fbI,4067
|
|
18
18
|
airflow/providers/standard/example_dags/example_bash_operator.py,sha256=tAS4cBsKW9B1nUukmYTpUw5Vf63476v_-tYjffyAtd4,2352
|
|
19
19
|
airflow/providers/standard/example_dags/example_branch_datetime_operator.py,sha256=6sGzn1xlMaF3I-HMI7bvx78oyxZUw5WAF_Gja_ZUch0,3765
|
|
20
20
|
airflow/providers/standard/example_dags/example_branch_day_of_week_operator.py,sha256=75ncMaGfkjxN0ULszqeXrSL5rHauUTNOhGiGAGPm3pw,2362
|
|
@@ -23,7 +23,7 @@ airflow/providers/standard/example_dags/example_branch_operator_decorator.py,sha
|
|
|
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
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=
|
|
26
|
+
airflow/providers/standard/example_dags/example_hitl_operator.py,sha256=sAgD5nXFUt6MreNkUdmAB6N2Hl2gd0vr0cS0OAw7Pso,6021
|
|
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=hiaTvIvHuN6-6dhdxJEot1FOTUmld1fr0c9lUVoCouo,4243
|
|
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=
|
|
47
|
+
airflow/providers/standard/operators/hitl.py,sha256=nUFsM7OQS2iknd0-9-oJU9I--C_8dXegnPhE_b3VXf8,18018
|
|
48
48
|
airflow/providers/standard/operators/latest_only.py,sha256=VkU-nAI8QbIrmeiv4wYXBcZF0yKMkcFapormg0J5-As,5110
|
|
49
49
|
airflow/providers/standard/operators/python.py,sha256=zRtonsvdBdUNIGjYQjrMkvz6eh0IZFwcQoFEekBe6Ys,53765
|
|
50
50
|
airflow/providers/standard/operators/smooth.py,sha256=IMs5GjM42XEiroksIZ5flGQgxfRUbXZXCWxpshVinYQ,1396
|
|
@@ -62,7 +62,7 @@ airflow/providers/standard/sensors/weekday.py,sha256=sKDQ7xC9c32DZxaGNIjqmW6HXE4
|
|
|
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=
|
|
65
|
+
airflow/providers/standard/triggers/hitl.py,sha256=MXAwMPlMcil1EBRnck9hjakicK93QfLTBEyKKmGucV0,7403
|
|
66
66
|
airflow/providers/standard/triggers/temporal.py,sha256=rqUMRsKTO46JvUbIXgReei5p9cnEd8PV4zJkLZWWOUI,4552
|
|
67
67
|
airflow/providers/standard/utils/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
|
|
68
68
|
airflow/providers/standard/utils/python_virtualenv.py,sha256=logUzODR5qnUZYyew-ZEbL7rudrkTEtmnU9qTQhg0-0,8532
|
|
@@ -70,7 +70,7 @@ airflow/providers/standard/utils/python_virtualenv_script.jinja2,sha256=3Z334hVq
|
|
|
70
70
|
airflow/providers/standard/utils/sensor_helper.py,sha256=FwI36sJK-s3Wz0slypF1_tAikQpiXovtTiN__Md00Aw,5049
|
|
71
71
|
airflow/providers/standard/utils/skipmixin.py,sha256=kHpui_Ag-bwbbwjQOfXEmE4zAWYrhO9H_qKGRkbtqdE,8349
|
|
72
72
|
airflow/providers/standard/utils/weekday.py,sha256=ySDrIkWv-lqqxURo9E98IGInDqERec2O4y9o2hQTGiQ,2685
|
|
73
|
-
apache_airflow_providers_standard-1.
|
|
74
|
-
apache_airflow_providers_standard-1.
|
|
75
|
-
apache_airflow_providers_standard-1.
|
|
76
|
-
apache_airflow_providers_standard-1.
|
|
73
|
+
apache_airflow_providers_standard-1.8.0rc1.dist-info/entry_points.txt,sha256=mW2YRh3mVdZdaP5-iGSNgmcCh3YYdALIn28BCLBZZ40,104
|
|
74
|
+
apache_airflow_providers_standard-1.8.0rc1.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
|
|
75
|
+
apache_airflow_providers_standard-1.8.0rc1.dist-info/METADATA,sha256=CglBdGScFsDjWa4Ic7ikWkEVBMi_iL3vAESP6ftTVhg,3809
|
|
76
|
+
apache_airflow_providers_standard-1.8.0rc1.dist-info/RECORD,,
|
|
File without changes
|