apache-airflow-providers-edge3 1.0.0__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.
- airflow/providers/edge3/LICENSE +201 -0
- airflow/providers/edge3/__init__.py +39 -0
- airflow/providers/edge3/cli/__init__.py +16 -0
- airflow/providers/edge3/cli/api_client.py +206 -0
- airflow/providers/edge3/cli/dataclasses.py +95 -0
- airflow/providers/edge3/cli/edge_command.py +689 -0
- airflow/providers/edge3/example_dags/__init__.py +16 -0
- airflow/providers/edge3/example_dags/integration_test.py +164 -0
- airflow/providers/edge3/example_dags/win_notepad.py +83 -0
- airflow/providers/edge3/example_dags/win_test.py +342 -0
- airflow/providers/edge3/executors/__init__.py +22 -0
- airflow/providers/edge3/executors/edge_executor.py +367 -0
- airflow/providers/edge3/get_provider_info.py +99 -0
- airflow/providers/edge3/models/__init__.py +16 -0
- airflow/providers/edge3/models/edge_job.py +94 -0
- airflow/providers/edge3/models/edge_logs.py +73 -0
- airflow/providers/edge3/models/edge_worker.py +230 -0
- airflow/providers/edge3/openapi/__init__.py +19 -0
- airflow/providers/edge3/openapi/edge_worker_api_v1.yaml +808 -0
- airflow/providers/edge3/plugins/__init__.py +16 -0
- airflow/providers/edge3/plugins/edge_executor_plugin.py +229 -0
- airflow/providers/edge3/plugins/templates/edge_worker_hosts.html +175 -0
- airflow/providers/edge3/plugins/templates/edge_worker_jobs.html +69 -0
- airflow/providers/edge3/version_compat.py +36 -0
- airflow/providers/edge3/worker_api/__init__.py +17 -0
- airflow/providers/edge3/worker_api/app.py +43 -0
- airflow/providers/edge3/worker_api/auth.py +135 -0
- airflow/providers/edge3/worker_api/datamodels.py +190 -0
- airflow/providers/edge3/worker_api/routes/__init__.py +16 -0
- airflow/providers/edge3/worker_api/routes/_v2_compat.py +135 -0
- airflow/providers/edge3/worker_api/routes/_v2_routes.py +237 -0
- airflow/providers/edge3/worker_api/routes/health.py +28 -0
- airflow/providers/edge3/worker_api/routes/jobs.py +162 -0
- airflow/providers/edge3/worker_api/routes/logs.py +133 -0
- airflow/providers/edge3/worker_api/routes/worker.py +224 -0
- apache_airflow_providers_edge3-1.0.0.dist-info/METADATA +117 -0
- apache_airflow_providers_edge3-1.0.0.dist-info/RECORD +39 -0
- apache_airflow_providers_edge3-1.0.0.dist-info/WHEEL +4 -0
- apache_airflow_providers_edge3-1.0.0.dist-info/entry_points.txt +6 -0
@@ -0,0 +1,224 @@
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one
|
2
|
+
# or more contributor license agreements. See the NOTICE file
|
3
|
+
# distributed with this work for additional information
|
4
|
+
# regarding copyright ownership. The ASF licenses this file
|
5
|
+
# to you under the Apache License, Version 2.0 (the
|
6
|
+
# "License"); you may not use this file except in compliance
|
7
|
+
# with the License. You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
12
|
+
# software distributed under the License is distributed on an
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
14
|
+
# KIND, either express or implied. See the License for the
|
15
|
+
# specific language governing permissions and limitations
|
16
|
+
# under the License.
|
17
|
+
|
18
|
+
from __future__ import annotations
|
19
|
+
|
20
|
+
import json
|
21
|
+
from typing import Annotated
|
22
|
+
|
23
|
+
from sqlalchemy import select
|
24
|
+
|
25
|
+
from airflow.providers.edge3.models.edge_worker import EdgeWorkerModel, EdgeWorkerState, set_metrics
|
26
|
+
from airflow.providers.edge3.worker_api.auth import jwt_token_authorization_rest
|
27
|
+
from airflow.providers.edge3.worker_api.datamodels import (
|
28
|
+
WorkerQueueUpdateBody,
|
29
|
+
WorkerRegistrationReturn,
|
30
|
+
WorkerSetStateReturn,
|
31
|
+
WorkerStateBody,
|
32
|
+
)
|
33
|
+
from airflow.providers.edge3.worker_api.routes._v2_compat import (
|
34
|
+
AirflowRouter,
|
35
|
+
Body,
|
36
|
+
Depends,
|
37
|
+
HTTPException,
|
38
|
+
Path,
|
39
|
+
SessionDep,
|
40
|
+
create_openapi_http_exception_doc,
|
41
|
+
status,
|
42
|
+
)
|
43
|
+
from airflow.stats import Stats
|
44
|
+
from airflow.utils import timezone
|
45
|
+
|
46
|
+
worker_router = AirflowRouter(
|
47
|
+
tags=["Worker"],
|
48
|
+
prefix="/worker",
|
49
|
+
responses=create_openapi_http_exception_doc(
|
50
|
+
[
|
51
|
+
status.HTTP_400_BAD_REQUEST,
|
52
|
+
status.HTTP_403_FORBIDDEN,
|
53
|
+
]
|
54
|
+
),
|
55
|
+
)
|
56
|
+
|
57
|
+
|
58
|
+
def _assert_version(sysinfo: dict[str, str | int]) -> None:
|
59
|
+
"""Check if the Edge Worker version matches the central API site."""
|
60
|
+
from airflow import __version__ as airflow_version
|
61
|
+
from airflow.providers.edge3 import __version__ as edge_provider_version
|
62
|
+
|
63
|
+
# Note: In future, more stable versions we might be more liberate, for the
|
64
|
+
# moment we require exact version match for Edge Worker and core version
|
65
|
+
if "airflow_version" in sysinfo:
|
66
|
+
airflow_on_worker = sysinfo["airflow_version"]
|
67
|
+
if airflow_on_worker != airflow_version:
|
68
|
+
raise HTTPException(
|
69
|
+
status.HTTP_400_BAD_REQUEST,
|
70
|
+
f"Edge Worker runs on Airflow {airflow_on_worker} "
|
71
|
+
f"and the core runs on {airflow_version}. Rejecting access due to difference.",
|
72
|
+
)
|
73
|
+
else:
|
74
|
+
raise HTTPException(
|
75
|
+
status.HTTP_400_BAD_REQUEST, "Edge Worker does not specify the version it is running on."
|
76
|
+
)
|
77
|
+
|
78
|
+
if "edge_provider_version" in sysinfo:
|
79
|
+
provider_on_worker = sysinfo["edge_provider_version"]
|
80
|
+
if provider_on_worker != edge_provider_version:
|
81
|
+
raise HTTPException(
|
82
|
+
status.HTTP_400_BAD_REQUEST,
|
83
|
+
f"Edge Worker runs on Edge Provider {provider_on_worker} "
|
84
|
+
f"and the core runs on {edge_provider_version}. Rejecting access due to difference.",
|
85
|
+
)
|
86
|
+
else:
|
87
|
+
raise HTTPException(
|
88
|
+
status.HTTP_400_BAD_REQUEST, "Edge Worker does not specify the provider version it is running on."
|
89
|
+
)
|
90
|
+
|
91
|
+
|
92
|
+
_worker_name_doc = Path(title="Worker Name", description="Hostname or instance name of the worker")
|
93
|
+
_worker_state_doc = Body(
|
94
|
+
title="Worker State",
|
95
|
+
description="State of the worker with details",
|
96
|
+
examples=[
|
97
|
+
{
|
98
|
+
"state": "running",
|
99
|
+
"jobs_active": 3,
|
100
|
+
"queues": ["large_node", "wisconsin_site"],
|
101
|
+
"sysinfo": {
|
102
|
+
"concurrency": 4,
|
103
|
+
"airflow_version": "2.10.0",
|
104
|
+
"edge_provider_version": "1.0.0",
|
105
|
+
},
|
106
|
+
}
|
107
|
+
],
|
108
|
+
)
|
109
|
+
_worker_queue_doc = Body(
|
110
|
+
title="Changes in worker queues",
|
111
|
+
description="Changes to be applied to current queues of worker",
|
112
|
+
examples=[{"new_queues": ["new_queue"], "remove_queues": ["old_queue"]}],
|
113
|
+
)
|
114
|
+
|
115
|
+
|
116
|
+
def redefine_state(worker_state: EdgeWorkerState, body_state: EdgeWorkerState) -> EdgeWorkerState:
|
117
|
+
"""Redefine the state of the worker based on maintenance request."""
|
118
|
+
if (
|
119
|
+
worker_state == EdgeWorkerState.MAINTENANCE_REQUEST
|
120
|
+
and body_state
|
121
|
+
not in (
|
122
|
+
EdgeWorkerState.MAINTENANCE_PENDING,
|
123
|
+
EdgeWorkerState.MAINTENANCE_MODE,
|
124
|
+
)
|
125
|
+
or worker_state == EdgeWorkerState.OFFLINE_MAINTENANCE
|
126
|
+
and body_state == EdgeWorkerState.STARTING
|
127
|
+
):
|
128
|
+
return EdgeWorkerState.MAINTENANCE_REQUEST
|
129
|
+
|
130
|
+
if worker_state == EdgeWorkerState.MAINTENANCE_EXIT:
|
131
|
+
if body_state == EdgeWorkerState.MAINTENANCE_PENDING:
|
132
|
+
return EdgeWorkerState.RUNNING
|
133
|
+
if body_state == EdgeWorkerState.MAINTENANCE_MODE:
|
134
|
+
return EdgeWorkerState.IDLE
|
135
|
+
|
136
|
+
return body_state
|
137
|
+
|
138
|
+
|
139
|
+
def redefine_maintenance_comments(
|
140
|
+
worker_maintenance_comment: str | None, body_maintenance_comments: str | None
|
141
|
+
) -> str | None:
|
142
|
+
"""Add new maintenance comments or overwrite the old ones if it is too long."""
|
143
|
+
if body_maintenance_comments:
|
144
|
+
if (
|
145
|
+
worker_maintenance_comment
|
146
|
+
and len(body_maintenance_comments) + len(worker_maintenance_comment) < 1020
|
147
|
+
):
|
148
|
+
return f"{worker_maintenance_comment}\n\n{body_maintenance_comments}"
|
149
|
+
return body_maintenance_comments
|
150
|
+
return worker_maintenance_comment
|
151
|
+
|
152
|
+
|
153
|
+
@worker_router.post("/{worker_name}", dependencies=[Depends(jwt_token_authorization_rest)])
|
154
|
+
def register(
|
155
|
+
worker_name: Annotated[str, _worker_name_doc],
|
156
|
+
body: Annotated[WorkerStateBody, _worker_state_doc],
|
157
|
+
session: SessionDep,
|
158
|
+
) -> WorkerRegistrationReturn:
|
159
|
+
"""Register a new worker to the backend."""
|
160
|
+
_assert_version(body.sysinfo)
|
161
|
+
query = select(EdgeWorkerModel).where(EdgeWorkerModel.worker_name == worker_name)
|
162
|
+
worker: EdgeWorkerModel = session.scalar(query)
|
163
|
+
if not worker:
|
164
|
+
worker = EdgeWorkerModel(worker_name=worker_name, state=body.state, queues=body.queues)
|
165
|
+
worker.state = redefine_state(worker.state, body.state)
|
166
|
+
worker.maintenance_comment = redefine_maintenance_comments(
|
167
|
+
worker.maintenance_comment, body.maintenance_comments
|
168
|
+
)
|
169
|
+
worker.queues = body.queues
|
170
|
+
worker.sysinfo = json.dumps(body.sysinfo)
|
171
|
+
worker.last_update = timezone.utcnow()
|
172
|
+
session.add(worker)
|
173
|
+
return WorkerRegistrationReturn(last_update=worker.last_update)
|
174
|
+
|
175
|
+
|
176
|
+
@worker_router.patch("/{worker_name}", dependencies=[Depends(jwt_token_authorization_rest)])
|
177
|
+
def set_state(
|
178
|
+
worker_name: Annotated[str, _worker_name_doc],
|
179
|
+
body: Annotated[WorkerStateBody, _worker_state_doc],
|
180
|
+
session: SessionDep,
|
181
|
+
) -> WorkerSetStateReturn:
|
182
|
+
"""Set state of worker and returns the current assigned queues."""
|
183
|
+
query = select(EdgeWorkerModel).where(EdgeWorkerModel.worker_name == worker_name)
|
184
|
+
worker: EdgeWorkerModel = session.scalar(query)
|
185
|
+
worker.state = redefine_state(worker.state, body.state)
|
186
|
+
worker.maintenance_comment = redefine_maintenance_comments(
|
187
|
+
worker.maintenance_comment, body.maintenance_comments
|
188
|
+
)
|
189
|
+
worker.jobs_active = body.jobs_active
|
190
|
+
worker.sysinfo = json.dumps(body.sysinfo)
|
191
|
+
worker.last_update = timezone.utcnow()
|
192
|
+
session.commit()
|
193
|
+
Stats.incr(f"edge_worker.heartbeat_count.{worker_name}", 1, 1)
|
194
|
+
Stats.incr("edge_worker.heartbeat_count", 1, 1, tags={"worker_name": worker_name})
|
195
|
+
set_metrics(
|
196
|
+
worker_name=worker_name,
|
197
|
+
state=body.state,
|
198
|
+
jobs_active=body.jobs_active,
|
199
|
+
concurrency=int(body.sysinfo.get("concurrency", -1)),
|
200
|
+
free_concurrency=int(body.sysinfo["free_concurrency"]),
|
201
|
+
queues=worker.queues,
|
202
|
+
)
|
203
|
+
_assert_version(body.sysinfo) # Exception only after worker state is in the DB
|
204
|
+
return WorkerSetStateReturn(
|
205
|
+
state=worker.state, queues=worker.queues, maintenance_comments=worker.maintenance_comment
|
206
|
+
)
|
207
|
+
|
208
|
+
|
209
|
+
@worker_router.patch(
|
210
|
+
"/queues/{worker_name}",
|
211
|
+
dependencies=[Depends(jwt_token_authorization_rest)],
|
212
|
+
)
|
213
|
+
def update_queues(
|
214
|
+
worker_name: Annotated[str, _worker_name_doc],
|
215
|
+
body: Annotated[WorkerQueueUpdateBody, _worker_queue_doc],
|
216
|
+
session: SessionDep,
|
217
|
+
) -> None:
|
218
|
+
query = select(EdgeWorkerModel).where(EdgeWorkerModel.worker_name == worker_name)
|
219
|
+
worker: EdgeWorkerModel = session.scalar(query)
|
220
|
+
if body.new_queues:
|
221
|
+
worker.add_queues(body.new_queues)
|
222
|
+
if body.remove_queues:
|
223
|
+
worker.remove_queues(body.remove_queues)
|
224
|
+
session.add(worker)
|
@@ -0,0 +1,117 @@
|
|
1
|
+
Metadata-Version: 2.4
|
2
|
+
Name: apache-airflow-providers-edge3
|
3
|
+
Version: 1.0.0
|
4
|
+
Summary: Provider package apache-airflow-providers-edge3 for Apache Airflow
|
5
|
+
Keywords: airflow-provider,edge3,airflow,integration
|
6
|
+
Author-email: Apache Software Foundation <dev@airflow.apache.org>
|
7
|
+
Maintainer-email: Apache Software Foundation <dev@airflow.apache.org>
|
8
|
+
Requires-Python: ~=3.9
|
9
|
+
Description-Content-Type: text/x-rst
|
10
|
+
Classifier: Development Status :: 5 - Production/Stable
|
11
|
+
Classifier: Environment :: Console
|
12
|
+
Classifier: Environment :: Web Environment
|
13
|
+
Classifier: Intended Audience :: Developers
|
14
|
+
Classifier: Intended Audience :: System Administrators
|
15
|
+
Classifier: Framework :: Apache Airflow
|
16
|
+
Classifier: Framework :: Apache Airflow :: Provider
|
17
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
18
|
+
Classifier: Programming Language :: Python :: 3.9
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
22
|
+
Classifier: Topic :: System :: Monitoring
|
23
|
+
Requires-Dist: apache-airflow>=2.10.0
|
24
|
+
Requires-Dist: pydantic>=2.11.0
|
25
|
+
Requires-Dist: retryhttp>=1.2.0,!=1.3.0
|
26
|
+
Requires-Dist: apache-airflow-providers-fab ; extra == "fab"
|
27
|
+
Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
|
28
|
+
Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-edge3/1.0.0/changelog.html
|
29
|
+
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-edge3/1.0.0
|
30
|
+
Project-URL: Mastodon, https://fosstodon.org/@airflow
|
31
|
+
Project-URL: Slack Chat, https://s.apache.org/airflow-slack
|
32
|
+
Project-URL: Source Code, https://github.com/apache/airflow
|
33
|
+
Project-URL: YouTube, https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/
|
34
|
+
Provides-Extra: fab
|
35
|
+
|
36
|
+
|
37
|
+
.. Licensed to the Apache Software Foundation (ASF) under one
|
38
|
+
or more contributor license agreements. See the NOTICE file
|
39
|
+
distributed with this work for additional information
|
40
|
+
regarding copyright ownership. The ASF licenses this file
|
41
|
+
to you under the Apache License, Version 2.0 (the
|
42
|
+
"License"); you may not use this file except in compliance
|
43
|
+
with the License. You may obtain a copy of the License at
|
44
|
+
|
45
|
+
.. http://www.apache.org/licenses/LICENSE-2.0
|
46
|
+
|
47
|
+
.. Unless required by applicable law or agreed to in writing,
|
48
|
+
software distributed under the License is distributed on an
|
49
|
+
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
50
|
+
KIND, either express or implied. See the License for the
|
51
|
+
specific language governing permissions and limitations
|
52
|
+
under the License.
|
53
|
+
|
54
|
+
.. NOTE! THIS FILE IS AUTOMATICALLY GENERATED AND WILL BE OVERWRITTEN!
|
55
|
+
|
56
|
+
.. IF YOU WANT TO MODIFY TEMPLATE FOR THIS FILE, YOU SHOULD MODIFY THE TEMPLATE
|
57
|
+
``PROVIDER_README_TEMPLATE.rst.jinja2`` IN the ``dev/breeze/src/airflow_breeze/templates`` DIRECTORY
|
58
|
+
|
59
|
+
Package ``apache-airflow-providers-edge3``
|
60
|
+
|
61
|
+
Release: ``1.0.0``
|
62
|
+
|
63
|
+
|
64
|
+
Handle edge workers on remote sites via HTTP(s) connection and orchestrates work over distributed sites
|
65
|
+
|
66
|
+
|
67
|
+
Provider package
|
68
|
+
----------------
|
69
|
+
|
70
|
+
This is a provider package for ``edge3`` provider. All classes for this provider package
|
71
|
+
are in ``airflow.providers.edge3`` python package.
|
72
|
+
|
73
|
+
You can find package information and changelog for the provider
|
74
|
+
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-edge3/1.0.0/>`_.
|
75
|
+
|
76
|
+
Installation
|
77
|
+
------------
|
78
|
+
|
79
|
+
You can install this package on top of an existing Airflow 2 installation (see ``Requirements`` below
|
80
|
+
for the minimum Airflow version supported) via
|
81
|
+
``pip install apache-airflow-providers-edge3``
|
82
|
+
|
83
|
+
The package supports the following python versions: 3.9,3.10,3.11,3.12
|
84
|
+
|
85
|
+
Requirements
|
86
|
+
------------
|
87
|
+
|
88
|
+
================== ===================
|
89
|
+
PIP package Version required
|
90
|
+
================== ===================
|
91
|
+
``apache-airflow`` ``>=2.10.0``
|
92
|
+
``pydantic`` ``>=2.11.0``
|
93
|
+
``retryhttp`` ``>=1.2.0,!=1.3.0``
|
94
|
+
================== ===================
|
95
|
+
|
96
|
+
Cross provider package dependencies
|
97
|
+
-----------------------------------
|
98
|
+
|
99
|
+
Those are dependencies that might be needed in order to use all the features of the package.
|
100
|
+
You need to install the specified providers in order to use them.
|
101
|
+
|
102
|
+
You can install such cross-provider dependencies when installing from PyPI. For example:
|
103
|
+
|
104
|
+
.. code-block:: bash
|
105
|
+
|
106
|
+
pip install apache-airflow-providers-edge3[fab]
|
107
|
+
|
108
|
+
|
109
|
+
============================================================================================== =======
|
110
|
+
Dependent package Extra
|
111
|
+
============================================================================================== =======
|
112
|
+
`apache-airflow-providers-fab <https://airflow.apache.org/docs/apache-airflow-providers-fab>`_ ``fab``
|
113
|
+
============================================================================================== =======
|
114
|
+
|
115
|
+
The changelog for the provider package can be found in the
|
116
|
+
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-edge3/1.0.0/changelog.html>`_.
|
117
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
airflow/providers/edge3/LICENSE,sha256=gXPVwptPlW1TJ4HSuG5OMPg-a3h43OGMkZRR1rpwfJA,10850
|
2
|
+
airflow/providers/edge3/__init__.py,sha256=hb8OUkltNOLHQS7pnEmS9LOc9NJyajbwwZY_51qn6kk,1494
|
3
|
+
airflow/providers/edge3/get_provider_info.py,sha256=T8CMBInzQT7TRJFEFf3tbDK6otJ210gXj4qOaOLyfnE,5548
|
4
|
+
airflow/providers/edge3/version_compat.py,sha256=aHg90_DtgoSnQvILFICexMyNlHlALBdaeWqkX3dFDug,1605
|
5
|
+
airflow/providers/edge3/cli/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
|
6
|
+
airflow/providers/edge3/cli/api_client.py,sha256=J5l99mwwKXC7Ub_kO6fe_56A8Ue3ag8mIYxD_qPLfuQ,7497
|
7
|
+
airflow/providers/edge3/cli/dataclasses.py,sha256=JUuvvmzSVWvG9uOEfzLIiXrTZ-HbESvu50jkPpVIYVw,2895
|
8
|
+
airflow/providers/edge3/cli/edge_command.py,sha256=xWNcgvUJyHqT51_Q-6bVPjCd1lrI7KpxSrFfejPvgjA,27466
|
9
|
+
airflow/providers/edge3/example_dags/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
|
10
|
+
airflow/providers/edge3/example_dags/integration_test.py,sha256=pXf6rmS4crHKfCBT73LvPmhJS8Rmri8pUlfIvuLja7E,5240
|
11
|
+
airflow/providers/edge3/example_dags/win_notepad.py,sha256=2evbqiupi5Ko4tyRkIEC5TPbc2c0wyR2YpsDYsBLMMM,2828
|
12
|
+
airflow/providers/edge3/example_dags/win_test.py,sha256=GegWqjvbsSdbsA_f3S9_FRYftVO0pggXwQQggB9Vvz4,13220
|
13
|
+
airflow/providers/edge3/executors/__init__.py,sha256=y830gGSKCvjOcLwLuCDp84NCrHWWB9RSSH1qvJpFhyY,923
|
14
|
+
airflow/providers/edge3/executors/edge_executor.py,sha256=d05OpRKd82mSkKeybNZPXw1yiRdZAKYLZGh15eIgaiM,15254
|
15
|
+
airflow/providers/edge3/models/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
|
16
|
+
airflow/providers/edge3/models/edge_job.py,sha256=rdl9cH1bBrc7id8zkZ7uxsCJNPLG-8o9cnspGwBPBcQ,3167
|
17
|
+
airflow/providers/edge3/models/edge_logs.py,sha256=bNstp7gR54O2vbxzz4NTL0erbifFbGUjZ-YOM0I4sqk,2768
|
18
|
+
airflow/providers/edge3/models/edge_worker.py,sha256=MsWzvJRTdvCRLZAMDy-nYYkMOl6Ji6AUeNfSQOeO6do,8587
|
19
|
+
airflow/providers/edge3/openapi/__init__.py,sha256=0O-WvmDx8GeKSoECpHYrbe0hW-LgjlKny3VqTCpBQeQ,927
|
20
|
+
airflow/providers/edge3/openapi/edge_worker_api_v1.yaml,sha256=GAE2IdOXmcUueNy5KFkLBgNpoWnOjnHT9TrW5NZEWpI,24938
|
21
|
+
airflow/providers/edge3/plugins/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
|
22
|
+
airflow/providers/edge3/plugins/edge_executor_plugin.py,sha256=wvveKcIUP9QkdTFIQmxq4GS15M8KnbHkDfKjlpvdvwk,9051
|
23
|
+
airflow/providers/edge3/plugins/templates/edge_worker_hosts.html,sha256=0_P2yfZwpy3Kvqd3GBvu_PgmmKCUbso3ieW8aYa76iU,8997
|
24
|
+
airflow/providers/edge3/plugins/templates/edge_worker_jobs.html,sha256=bZ-6ysmIy6j4eR_TPHiqbgb3qpNMKCcEEB-SpxuxNgc,2831
|
25
|
+
airflow/providers/edge3/worker_api/__init__.py,sha256=nnPvxWGTEKZ9YyB1Yd7P9IvDOenK01LVHm22Owwxj3g,839
|
26
|
+
airflow/providers/edge3/worker_api/app.py,sha256=Dda2VjkzgBtbQbSWSVEAoqd22RlqvBMyiPau65uKkv4,2006
|
27
|
+
airflow/providers/edge3/worker_api/auth.py,sha256=4UFKc6wQPt9AqoMXMxt1rXljEy8xofgaIhzIdLR54gc,4936
|
28
|
+
airflow/providers/edge3/worker_api/datamodels.py,sha256=FAiXqnrSN8zH4YE2fUMjXfXcH9cHlhRh4uZvvr936Ys,6696
|
29
|
+
airflow/providers/edge3/worker_api/routes/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
|
30
|
+
airflow/providers/edge3/worker_api/routes/_v2_compat.py,sha256=Q4b2Io0yoK5V_hbgk6fiFviTeT6CFbFMOGYRZgLEeR4,4543
|
31
|
+
airflow/providers/edge3/worker_api/routes/_v2_routes.py,sha256=-WAofvXJpOYpTyh983cxMarA5FkPlH7LMhZuSHE-qPg,10830
|
32
|
+
airflow/providers/edge3/worker_api/routes/health.py,sha256=XxqIppnRA138Q6mAHCdyL2JvoeeganUiI-TXyXSPTGo,1075
|
33
|
+
airflow/providers/edge3/worker_api/routes/jobs.py,sha256=UK1w6nXEUadOLwE9abZ4jHH4KtbvXcwaAF0EnwSa3y4,5733
|
34
|
+
airflow/providers/edge3/worker_api/routes/logs.py,sha256=uk0SZ5hAimj3sAcq1FYCDu0AXYNeTeyjZDGBvw-986E,4945
|
35
|
+
airflow/providers/edge3/worker_api/routes/worker.py,sha256=jb6m9eE9J1fyejf-DuEtGPzGrynyUmf5qkZxLeN-DQo,8554
|
36
|
+
apache_airflow_providers_edge3-1.0.0.dist-info/entry_points.txt,sha256=7WUIGfd3o9NvvbK5trbZxNXTgYGc6pqg74wZPigbx5o,206
|
37
|
+
apache_airflow_providers_edge3-1.0.0.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
|
38
|
+
apache_airflow_providers_edge3-1.0.0.dist-info/METADATA,sha256=zsqZL7eFQZvX8sSAkU9e99QOvOAGaJXYIpKEenYwScM,4980
|
39
|
+
apache_airflow_providers_edge3-1.0.0.dist-info/RECORD,,
|