apache-airflow-providers-openlineage 2.4.0__py3-none-any.whl → 2.5.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.
Potentially problematic release.
This version of apache-airflow-providers-openlineage might be problematic. Click here for more details.
- airflow/providers/openlineage/__init__.py +1 -1
- airflow/providers/openlineage/extractors/base.py +2 -2
- airflow/providers/openlineage/extractors/python.py +1 -1
- airflow/providers/openlineage/plugins/listener.py +21 -17
- airflow/providers/openlineage/plugins/macros.py +13 -1
- airflow/providers/openlineage/sqlparser.py +3 -2
- airflow/providers/openlineage/utils/sql.py +3 -3
- airflow/providers/openlineage/utils/utils.py +45 -15
- {apache_airflow_providers_openlineage-2.4.0.dist-info → apache_airflow_providers_openlineage-2.5.0.dist-info}/METADATA +12 -13
- {apache_airflow_providers_openlineage-2.4.0.dist-info → apache_airflow_providers_openlineage-2.5.0.dist-info}/RECORD +12 -12
- {apache_airflow_providers_openlineage-2.4.0.dist-info → apache_airflow_providers_openlineage-2.5.0.dist-info}/WHEEL +0 -0
- {apache_airflow_providers_openlineage-2.4.0.dist-info → apache_airflow_providers_openlineage-2.5.0.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__ = "2.
|
|
32
|
+
__version__ = "2.5.0"
|
|
33
33
|
|
|
34
34
|
if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
|
|
35
35
|
"2.10.0"
|
|
@@ -19,7 +19,7 @@ from __future__ import annotations
|
|
|
19
19
|
|
|
20
20
|
import warnings
|
|
21
21
|
from abc import ABC, abstractmethod
|
|
22
|
-
from typing import Generic, TypeVar
|
|
22
|
+
from typing import Generic, TypeVar
|
|
23
23
|
|
|
24
24
|
from attrs import Factory, define
|
|
25
25
|
from openlineage.client.event_v2 import Dataset as OLDataset
|
|
@@ -33,7 +33,7 @@ from airflow.utils.log.logging_mixin import LoggingMixin
|
|
|
33
33
|
|
|
34
34
|
# this is not to break static checks compatibility with v1 OpenLineage facet classes
|
|
35
35
|
DatasetSubclass = TypeVar("DatasetSubclass", bound=OLDataset)
|
|
36
|
-
BaseFacetSubclass = TypeVar("BaseFacetSubclass", bound=
|
|
36
|
+
BaseFacetSubclass = TypeVar("BaseFacetSubclass", bound=BaseFacet_V1 | RunFacet | JobFacet)
|
|
37
37
|
|
|
38
38
|
OL_METHOD_NAME_START = "get_openlineage_facets_on_start"
|
|
39
39
|
OL_METHOD_NAME_COMPLETE = "get_openlineage_facets_on_complete"
|
|
@@ -147,7 +147,7 @@ class OpenLineageListener:
|
|
|
147
147
|
"Skipping OpenLineage event emission for task `%s` "
|
|
148
148
|
"due to lack of explicit lineage enablement for task or DAG while "
|
|
149
149
|
"[openlineage] selective_enable is on.",
|
|
150
|
-
|
|
150
|
+
task_instance.task_id,
|
|
151
151
|
)
|
|
152
152
|
return
|
|
153
153
|
|
|
@@ -170,14 +170,14 @@ class OpenLineageListener:
|
|
|
170
170
|
clear_number = dagrun.clear_number
|
|
171
171
|
|
|
172
172
|
parent_run_id = self.adapter.build_dag_run_id(
|
|
173
|
-
dag_id=
|
|
173
|
+
dag_id=task_instance.dag_id,
|
|
174
174
|
logical_date=date,
|
|
175
175
|
clear_number=clear_number,
|
|
176
176
|
)
|
|
177
177
|
|
|
178
178
|
task_uuid = self.adapter.build_task_instance_run_id(
|
|
179
|
-
dag_id=
|
|
180
|
-
task_id=
|
|
179
|
+
dag_id=task_instance.dag_id,
|
|
180
|
+
task_id=task_instance.task_id,
|
|
181
181
|
try_number=task_instance.try_number,
|
|
182
182
|
logical_date=date,
|
|
183
183
|
map_index=task_instance.map_index,
|
|
@@ -199,7 +199,7 @@ class OpenLineageListener:
|
|
|
199
199
|
|
|
200
200
|
redacted_event = self.adapter.start_task(
|
|
201
201
|
run_id=task_uuid,
|
|
202
|
-
job_name=get_job_name(
|
|
202
|
+
job_name=get_job_name(task_instance),
|
|
203
203
|
job_description=dag.description,
|
|
204
204
|
event_time=start_date.isoformat(),
|
|
205
205
|
nominal_start_time=data_interval_start,
|
|
@@ -278,7 +278,7 @@ class OpenLineageListener:
|
|
|
278
278
|
"Skipping OpenLineage event emission for task `%s` "
|
|
279
279
|
"due to lack of explicit lineage enablement for task or DAG while "
|
|
280
280
|
"[openlineage] selective_enable is on.",
|
|
281
|
-
|
|
281
|
+
task_instance.task_id,
|
|
282
282
|
)
|
|
283
283
|
return
|
|
284
284
|
|
|
@@ -289,14 +289,14 @@ class OpenLineageListener:
|
|
|
289
289
|
date = dagrun.run_after
|
|
290
290
|
|
|
291
291
|
parent_run_id = self.adapter.build_dag_run_id(
|
|
292
|
-
dag_id=
|
|
292
|
+
dag_id=task_instance.dag_id,
|
|
293
293
|
logical_date=date,
|
|
294
294
|
clear_number=dagrun.clear_number,
|
|
295
295
|
)
|
|
296
296
|
|
|
297
297
|
task_uuid = self.adapter.build_task_instance_run_id(
|
|
298
|
-
dag_id=
|
|
299
|
-
task_id=
|
|
298
|
+
dag_id=task_instance.dag_id,
|
|
299
|
+
task_id=task_instance.task_id,
|
|
300
300
|
try_number=task_instance.try_number,
|
|
301
301
|
logical_date=date,
|
|
302
302
|
map_index=task_instance.map_index,
|
|
@@ -321,7 +321,7 @@ class OpenLineageListener:
|
|
|
321
321
|
|
|
322
322
|
redacted_event = self.adapter.complete_task(
|
|
323
323
|
run_id=task_uuid,
|
|
324
|
-
job_name=get_job_name(
|
|
324
|
+
job_name=get_job_name(task_instance),
|
|
325
325
|
end_time=end_date.isoformat(),
|
|
326
326
|
task=task_metadata,
|
|
327
327
|
# If task owner is default ("airflow"), use DAG owner instead that may have more details
|
|
@@ -409,7 +409,7 @@ class OpenLineageListener:
|
|
|
409
409
|
"Skipping OpenLineage event emission for task `%s` "
|
|
410
410
|
"due to lack of explicit lineage enablement for task or DAG while "
|
|
411
411
|
"[openlineage] selective_enable is on.",
|
|
412
|
-
|
|
412
|
+
task_instance.task_id,
|
|
413
413
|
)
|
|
414
414
|
return
|
|
415
415
|
|
|
@@ -420,14 +420,14 @@ class OpenLineageListener:
|
|
|
420
420
|
date = dagrun.run_after
|
|
421
421
|
|
|
422
422
|
parent_run_id = self.adapter.build_dag_run_id(
|
|
423
|
-
dag_id=
|
|
423
|
+
dag_id=task_instance.dag_id,
|
|
424
424
|
logical_date=date,
|
|
425
425
|
clear_number=dagrun.clear_number,
|
|
426
426
|
)
|
|
427
427
|
|
|
428
428
|
task_uuid = self.adapter.build_task_instance_run_id(
|
|
429
|
-
dag_id=
|
|
430
|
-
task_id=
|
|
429
|
+
dag_id=task_instance.dag_id,
|
|
430
|
+
task_id=task_instance.task_id,
|
|
431
431
|
try_number=task_instance.try_number,
|
|
432
432
|
logical_date=date,
|
|
433
433
|
map_index=task_instance.map_index,
|
|
@@ -452,7 +452,7 @@ class OpenLineageListener:
|
|
|
452
452
|
|
|
453
453
|
redacted_event = self.adapter.fail_task(
|
|
454
454
|
run_id=task_uuid,
|
|
455
|
-
job_name=get_job_name(
|
|
455
|
+
job_name=get_job_name(task_instance),
|
|
456
456
|
end_time=end_date.isoformat(),
|
|
457
457
|
task=task_metadata,
|
|
458
458
|
error=error,
|
|
@@ -489,13 +489,13 @@ class OpenLineageListener:
|
|
|
489
489
|
def on_state_change():
|
|
490
490
|
date = dagrun.logical_date or dagrun.run_after
|
|
491
491
|
parent_run_id = self.adapter.build_dag_run_id(
|
|
492
|
-
dag_id=
|
|
492
|
+
dag_id=ti.dag_id,
|
|
493
493
|
logical_date=date,
|
|
494
494
|
clear_number=dagrun.clear_number,
|
|
495
495
|
)
|
|
496
496
|
|
|
497
497
|
task_uuid = self.adapter.build_task_instance_run_id(
|
|
498
|
-
dag_id=
|
|
498
|
+
dag_id=ti.dag_id,
|
|
499
499
|
task_id=ti.task_id,
|
|
500
500
|
try_number=ti.try_number,
|
|
501
501
|
logical_date=date,
|
|
@@ -507,6 +507,10 @@ class OpenLineageListener:
|
|
|
507
507
|
"job_name": get_job_name(ti),
|
|
508
508
|
"end_time": end_date.isoformat(),
|
|
509
509
|
"task": OperatorLineage(),
|
|
510
|
+
"nominal_start_time": None,
|
|
511
|
+
"nominal_end_time": None,
|
|
512
|
+
"tags": None,
|
|
513
|
+
"owners": None,
|
|
510
514
|
"run_facets": {
|
|
511
515
|
**get_task_parent_run_facet(parent_run_id=parent_run_id, parent_job_name=ti.dag_id),
|
|
512
516
|
**get_airflow_debug_facet(),
|
|
@@ -117,10 +117,22 @@ def lineage_root_run_id(task_instance: TaskInstance):
|
|
|
117
117
|
return OpenLineageAdapter.build_dag_run_id(
|
|
118
118
|
dag_id=task_instance.dag_id,
|
|
119
119
|
logical_date=_get_logical_date(task_instance),
|
|
120
|
-
clear_number=task_instance
|
|
120
|
+
clear_number=_get_dag_run_clear_number(task_instance),
|
|
121
121
|
)
|
|
122
122
|
|
|
123
123
|
|
|
124
|
+
def _get_dag_run_clear_number(task_instance: TaskInstance):
|
|
125
|
+
# todo: remove when min airflow version >= 3.0
|
|
126
|
+
if AIRFLOW_V_3_0_PLUS:
|
|
127
|
+
context = task_instance.get_template_context()
|
|
128
|
+
if hasattr(task_instance, "dag_run"):
|
|
129
|
+
dag_run = task_instance.dag_run
|
|
130
|
+
else:
|
|
131
|
+
dag_run = context["dag_run"]
|
|
132
|
+
return dag_run.clear_number
|
|
133
|
+
return task_instance.dag_run.clear_number
|
|
134
|
+
|
|
135
|
+
|
|
124
136
|
def _get_logical_date(task_instance):
|
|
125
137
|
# todo: remove when min airflow version >= 3.0
|
|
126
138
|
if AIRFLOW_V_3_0_PLUS:
|
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
from __future__ import annotations
|
|
18
18
|
|
|
19
19
|
import logging
|
|
20
|
-
from
|
|
20
|
+
from collections.abc import Callable
|
|
21
|
+
from typing import TYPE_CHECKING, TypedDict
|
|
21
22
|
|
|
22
23
|
import sqlparse
|
|
23
24
|
from attrs import define
|
|
@@ -38,8 +39,8 @@ if TYPE_CHECKING:
|
|
|
38
39
|
from openlineage.client.facet_v2 import JobFacet, RunFacet
|
|
39
40
|
from sqlalchemy.engine import Engine
|
|
40
41
|
|
|
41
|
-
from airflow.hooks.base import BaseHook
|
|
42
42
|
from airflow.providers.common.sql.hooks.sql import DbApiHook
|
|
43
|
+
from airflow.sdk import BaseHook
|
|
43
44
|
|
|
44
45
|
log = logging.getLogger(__name__)
|
|
45
46
|
|
|
@@ -20,7 +20,7 @@ import logging
|
|
|
20
20
|
from collections import defaultdict
|
|
21
21
|
from contextlib import closing
|
|
22
22
|
from enum import IntEnum
|
|
23
|
-
from typing import TYPE_CHECKING
|
|
23
|
+
from typing import TYPE_CHECKING
|
|
24
24
|
|
|
25
25
|
from attrs import define
|
|
26
26
|
from openlineage.client.event_v2 import Dataset
|
|
@@ -31,7 +31,7 @@ if TYPE_CHECKING:
|
|
|
31
31
|
from sqlalchemy.engine import Engine
|
|
32
32
|
from sqlalchemy.sql import ClauseElement
|
|
33
33
|
|
|
34
|
-
from airflow.
|
|
34
|
+
from airflow.sdk import BaseHook
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
log = logging.getLogger(__name__)
|
|
@@ -50,7 +50,7 @@ class ColumnIndex(IntEnum):
|
|
|
50
50
|
DATABASE = 5
|
|
51
51
|
|
|
52
52
|
|
|
53
|
-
TablesHierarchy = dict[
|
|
53
|
+
TablesHierarchy = dict[str | None, dict[str | None, list[str]]]
|
|
54
54
|
|
|
55
55
|
|
|
56
56
|
@define
|
|
@@ -20,10 +20,11 @@ from __future__ import annotations
|
|
|
20
20
|
import datetime
|
|
21
21
|
import json
|
|
22
22
|
import logging
|
|
23
|
+
from collections.abc import Callable
|
|
23
24
|
from contextlib import suppress
|
|
24
25
|
from functools import wraps
|
|
25
26
|
from importlib import metadata
|
|
26
|
-
from typing import TYPE_CHECKING, Any
|
|
27
|
+
from typing import TYPE_CHECKING, Any
|
|
27
28
|
|
|
28
29
|
import attrs
|
|
29
30
|
from openlineage.client.facet_v2 import parent_run
|
|
@@ -32,7 +33,7 @@ from openlineage.client.utils import RedactMixin
|
|
|
32
33
|
from airflow import __version__ as AIRFLOW_VERSION
|
|
33
34
|
|
|
34
35
|
# TODO: move this maybe to Airflow's logic?
|
|
35
|
-
from airflow.models import
|
|
36
|
+
from airflow.models import DagRun, TaskReschedule
|
|
36
37
|
from airflow.providers.openlineage import (
|
|
37
38
|
__version__ as OPENLINEAGE_PROVIDER_VERSION,
|
|
38
39
|
conf,
|
|
@@ -52,18 +53,17 @@ from airflow.providers.openlineage.utils.selective_enable import (
|
|
|
52
53
|
is_task_lineage_enabled,
|
|
53
54
|
)
|
|
54
55
|
from airflow.providers.openlineage.version_compat import AIRFLOW_V_3_0_PLUS
|
|
55
|
-
from airflow.sensors.base import BaseSensorOperator
|
|
56
56
|
from airflow.serialization.serialized_objects import SerializedBaseOperator
|
|
57
57
|
from airflow.utils.module_loading import import_string
|
|
58
58
|
|
|
59
|
+
if AIRFLOW_V_3_0_PLUS:
|
|
60
|
+
from airflow.sdk import BaseSensorOperator
|
|
61
|
+
else:
|
|
62
|
+
from airflow.sensors.base import BaseSensorOperator # type: ignore[no-redef]
|
|
63
|
+
|
|
59
64
|
if not AIRFLOW_V_3_0_PLUS:
|
|
60
65
|
from airflow.utils.session import NEW_SESSION, provide_session
|
|
61
66
|
|
|
62
|
-
try:
|
|
63
|
-
from airflow.sdk import BaseOperator as SdkBaseOperator
|
|
64
|
-
except ImportError:
|
|
65
|
-
SdkBaseOperator = BaseOperator # type: ignore[misc]
|
|
66
|
-
|
|
67
67
|
if TYPE_CHECKING:
|
|
68
68
|
from openlineage.client.event_v2 import Dataset as OpenLineageDataset
|
|
69
69
|
from openlineage.client.facet_v2 import RunFacet, processing_engine_run
|
|
@@ -71,6 +71,7 @@ if TYPE_CHECKING:
|
|
|
71
71
|
from airflow.models import TaskInstance
|
|
72
72
|
from airflow.providers.common.compat.assets import Asset
|
|
73
73
|
from airflow.sdk import DAG
|
|
74
|
+
from airflow.sdk.bases.operator import BaseOperator
|
|
74
75
|
from airflow.sdk.definitions.mappedoperator import MappedOperator
|
|
75
76
|
from airflow.sdk.execution_time.secrets_masker import (
|
|
76
77
|
Redactable,
|
|
@@ -78,13 +79,15 @@ if TYPE_CHECKING:
|
|
|
78
79
|
SecretsMasker,
|
|
79
80
|
should_hide_value_for_key,
|
|
80
81
|
)
|
|
82
|
+
from airflow.sdk.execution_time.task_runner import RuntimeTaskInstance
|
|
81
83
|
from airflow.utils.state import DagRunState, TaskInstanceState
|
|
82
84
|
else:
|
|
83
85
|
try:
|
|
84
86
|
from airflow.sdk import DAG
|
|
87
|
+
from airflow.sdk.bases.operator import BaseOperator
|
|
85
88
|
from airflow.sdk.definitions.mappedoperator import MappedOperator
|
|
86
89
|
except ImportError:
|
|
87
|
-
from airflow.models import DAG, MappedOperator
|
|
90
|
+
from airflow.models import DAG, BaseOperator, MappedOperator
|
|
88
91
|
|
|
89
92
|
try:
|
|
90
93
|
from airflow.providers.common.compat.assets import Asset
|
|
@@ -119,13 +122,39 @@ def try_import_from_string(string: str) -> Any:
|
|
|
119
122
|
return import_string(string)
|
|
120
123
|
|
|
121
124
|
|
|
122
|
-
def get_operator_class(task: BaseOperator
|
|
125
|
+
def get_operator_class(task: BaseOperator) -> type:
|
|
123
126
|
if task.__class__.__name__ in ("DecoratedMappedOperator", "MappedOperator"):
|
|
124
127
|
return task.operator_class
|
|
125
128
|
return task.__class__
|
|
126
129
|
|
|
127
130
|
|
|
128
|
-
def
|
|
131
|
+
def get_operator_provider_version(operator: BaseOperator | MappedOperator) -> str | None:
|
|
132
|
+
"""Get the provider package version for the given operator."""
|
|
133
|
+
try:
|
|
134
|
+
class_path = get_fully_qualified_class_name(operator)
|
|
135
|
+
|
|
136
|
+
if not class_path.startswith("airflow.providers."):
|
|
137
|
+
return None
|
|
138
|
+
|
|
139
|
+
from airflow.providers_manager import ProvidersManager
|
|
140
|
+
|
|
141
|
+
providers_manager = ProvidersManager()
|
|
142
|
+
|
|
143
|
+
for package_name, provider_info in providers_manager.providers.items():
|
|
144
|
+
if package_name.startswith("apache-airflow-providers-"):
|
|
145
|
+
provider_module_path = package_name.replace(
|
|
146
|
+
"apache-airflow-providers-", "airflow.providers."
|
|
147
|
+
).replace("-", ".")
|
|
148
|
+
if class_path.startswith(provider_module_path + "."):
|
|
149
|
+
return provider_info.version
|
|
150
|
+
|
|
151
|
+
return None
|
|
152
|
+
|
|
153
|
+
except Exception:
|
|
154
|
+
return None
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def get_job_name(task: TaskInstance | RuntimeTaskInstance) -> str:
|
|
129
158
|
return f"{task.dag_id}.{task.task_id}"
|
|
130
159
|
|
|
131
160
|
|
|
@@ -203,7 +232,7 @@ def get_user_provided_run_facets(ti: TaskInstance, ti_state: TaskInstanceState)
|
|
|
203
232
|
return custom_facets
|
|
204
233
|
|
|
205
234
|
|
|
206
|
-
def get_fully_qualified_class_name(operator: BaseOperator | MappedOperator
|
|
235
|
+
def get_fully_qualified_class_name(operator: BaseOperator | MappedOperator) -> str:
|
|
207
236
|
if isinstance(operator, (MappedOperator, SerializedBaseOperator)):
|
|
208
237
|
# as in airflow.api_connexion.schemas.common_schema.ClassReferenceSchema
|
|
209
238
|
return operator._task_module + "." + operator._task_type # type: ignore
|
|
@@ -211,17 +240,17 @@ def get_fully_qualified_class_name(operator: BaseOperator | MappedOperator | Sdk
|
|
|
211
240
|
return op_class.__module__ + "." + op_class.__name__
|
|
212
241
|
|
|
213
242
|
|
|
214
|
-
def is_operator_disabled(operator: BaseOperator | MappedOperator
|
|
243
|
+
def is_operator_disabled(operator: BaseOperator | MappedOperator) -> bool:
|
|
215
244
|
return get_fully_qualified_class_name(operator) in conf.disabled_operators()
|
|
216
245
|
|
|
217
246
|
|
|
218
|
-
def is_selective_lineage_enabled(obj: DAG | BaseOperator | MappedOperator
|
|
247
|
+
def is_selective_lineage_enabled(obj: DAG | BaseOperator | MappedOperator) -> bool:
|
|
219
248
|
"""If selective enable is active check if DAG or Task is enabled to emit events."""
|
|
220
249
|
if not conf.selective_enable():
|
|
221
250
|
return True
|
|
222
251
|
if isinstance(obj, DAG):
|
|
223
252
|
return is_dag_lineage_enabled(obj)
|
|
224
|
-
if isinstance(obj, (BaseOperator, MappedOperator
|
|
253
|
+
if isinstance(obj, (BaseOperator, MappedOperator)):
|
|
225
254
|
return is_task_lineage_enabled(obj)
|
|
226
255
|
raise TypeError("is_selective_lineage_enabled can only be used on DAG or Operator objects")
|
|
227
256
|
|
|
@@ -508,6 +537,7 @@ class TaskInfo(InfoJsonEncodable):
|
|
|
508
537
|
),
|
|
509
538
|
"inlets": lambda task: [AssetInfo(i) for i in task.inlets if isinstance(i, Asset)],
|
|
510
539
|
"outlets": lambda task: [AssetInfo(o) for o in task.outlets if isinstance(o, Asset)],
|
|
540
|
+
"operator_provider_version": lambda task: get_operator_provider_version(task),
|
|
511
541
|
}
|
|
512
542
|
|
|
513
543
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: apache-airflow-providers-openlineage
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.5.0
|
|
4
4
|
Summary: Provider package apache-airflow-providers-openlineage for Apache Airflow
|
|
5
5
|
Keywords: airflow-provider,openlineage,airflow,integration
|
|
6
6
|
Author-email: Apache Software Foundation <dev@airflow.apache.org>
|
|
7
7
|
Maintainer-email: Apache Software Foundation <dev@airflow.apache.org>
|
|
8
|
-
Requires-Python: ~=3.
|
|
8
|
+
Requires-Python: ~=3.10
|
|
9
9
|
Description-Content-Type: text/x-rst
|
|
10
10
|
Classifier: Development Status :: 5 - Production/Stable
|
|
11
11
|
Classifier: Environment :: Console
|
|
@@ -15,7 +15,6 @@ Classifier: Intended Audience :: System Administrators
|
|
|
15
15
|
Classifier: Framework :: Apache Airflow
|
|
16
16
|
Classifier: Framework :: Apache Airflow :: Provider
|
|
17
17
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.10
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.11
|
|
21
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -24,11 +23,11 @@ Requires-Dist: apache-airflow>=2.10.0
|
|
|
24
23
|
Requires-Dist: apache-airflow-providers-common-sql>=1.20.0
|
|
25
24
|
Requires-Dist: apache-airflow-providers-common-compat>=1.4.0
|
|
26
25
|
Requires-Dist: attrs>=22.2
|
|
27
|
-
Requires-Dist: openlineage-integration-common>=1.
|
|
28
|
-
Requires-Dist: openlineage-python>=1.
|
|
26
|
+
Requires-Dist: openlineage-integration-common>=1.34.0
|
|
27
|
+
Requires-Dist: openlineage-python>=1.34.0
|
|
29
28
|
Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
|
|
30
|
-
Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.
|
|
31
|
-
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.
|
|
29
|
+
Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.5.0/changelog.html
|
|
30
|
+
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.5.0
|
|
32
31
|
Project-URL: Mastodon, https://fosstodon.org/@airflow
|
|
33
32
|
Project-URL: Slack Chat, https://s.apache.org/airflow-slack
|
|
34
33
|
Project-URL: Source Code, https://github.com/apache/airflow
|
|
@@ -59,7 +58,7 @@ Project-URL: YouTube, https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/
|
|
|
59
58
|
|
|
60
59
|
Package ``apache-airflow-providers-openlineage``
|
|
61
60
|
|
|
62
|
-
Release: ``2.
|
|
61
|
+
Release: ``2.5.0``
|
|
63
62
|
|
|
64
63
|
|
|
65
64
|
`OpenLineage <https://openlineage.io/>`__
|
|
@@ -72,7 +71,7 @@ This is a provider package for ``openlineage`` provider. All classes for this pr
|
|
|
72
71
|
are in ``airflow.providers.openlineage`` python package.
|
|
73
72
|
|
|
74
73
|
You can find package information and changelog for the provider
|
|
75
|
-
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.
|
|
74
|
+
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.5.0/>`_.
|
|
76
75
|
|
|
77
76
|
Installation
|
|
78
77
|
------------
|
|
@@ -81,7 +80,7 @@ You can install this package on top of an existing Airflow 2 installation (see `
|
|
|
81
80
|
for the minimum Airflow version supported) via
|
|
82
81
|
``pip install apache-airflow-providers-openlineage``
|
|
83
82
|
|
|
84
|
-
The package supports the following python versions: 3.
|
|
83
|
+
The package supports the following python versions: 3.10,3.11,3.12
|
|
85
84
|
|
|
86
85
|
Requirements
|
|
87
86
|
------------
|
|
@@ -93,8 +92,8 @@ PIP package Version required
|
|
|
93
92
|
``apache-airflow-providers-common-sql`` ``>=1.20.0``
|
|
94
93
|
``apache-airflow-providers-common-compat`` ``>=1.4.0``
|
|
95
94
|
``attrs`` ``>=22.2``
|
|
96
|
-
``openlineage-integration-common`` ``>=1.
|
|
97
|
-
``openlineage-python`` ``>=1.
|
|
95
|
+
``openlineage-integration-common`` ``>=1.34.0``
|
|
96
|
+
``openlineage-python`` ``>=1.34.0``
|
|
98
97
|
========================================== ==================
|
|
99
98
|
|
|
100
99
|
Cross provider package dependencies
|
|
@@ -118,5 +117,5 @@ Dependent package
|
|
|
118
117
|
================================================================================================================== =================
|
|
119
118
|
|
|
120
119
|
The changelog for the provider package can be found in the
|
|
121
|
-
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.
|
|
120
|
+
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.5.0/changelog.html>`_.
|
|
122
121
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
airflow/providers/openlineage/LICENSE,sha256=gXPVwptPlW1TJ4HSuG5OMPg-a3h43OGMkZRR1rpwfJA,10850
|
|
2
|
-
airflow/providers/openlineage/__init__.py,sha256=
|
|
2
|
+
airflow/providers/openlineage/__init__.py,sha256=T2EIoXrtmbdXfH_F2bMY8LyH9-aiMt_Mj5K780qyt3I,1500
|
|
3
3
|
airflow/providers/openlineage/conf.py,sha256=aYdLU7iHBdGIU8ZAC5iUiIDgXP9gvP9r_z5hTAbXPOU,5535
|
|
4
4
|
airflow/providers/openlineage/get_provider_info.py,sha256=z0oCEDCM3UyrlXrQt0ksTi6jYd2vqjiSSudBM7hLNZw,9255
|
|
5
|
-
airflow/providers/openlineage/sqlparser.py,sha256=
|
|
5
|
+
airflow/providers/openlineage/sqlparser.py,sha256=8Aq0qbUUBthKjXBV756p2aBf8RYfCuBBfgxwhGpQIg4,20360
|
|
6
6
|
airflow/providers/openlineage/version_compat.py,sha256=j5PCtXvZ71aBjixu-EFTNtVDPsngzzs7os0ZQDgFVDk,1536
|
|
7
7
|
airflow/providers/openlineage/extractors/__init__.py,sha256=I0X4f6zUniclyD9zT0DFHRImpCpJVP4MkPJT3cd7X5I,1081
|
|
8
|
-
airflow/providers/openlineage/extractors/base.py,sha256=
|
|
8
|
+
airflow/providers/openlineage/extractors/base.py,sha256=BsYKXTbz0t8TZIyKDfPV--iWwR5NCLWMVjQv2SKajCE,6465
|
|
9
9
|
airflow/providers/openlineage/extractors/bash.py,sha256=3aR0PXs8fzRLibRxXN1R8wMZnGzyCur7mjpy8e5GC4A,2583
|
|
10
10
|
airflow/providers/openlineage/extractors/manager.py,sha256=kVo5OHkpUoYIiT2RvwUt128jC_Q4EosdLC0sP1YfIH0,12840
|
|
11
|
-
airflow/providers/openlineage/extractors/python.py,sha256=
|
|
11
|
+
airflow/providers/openlineage/extractors/python.py,sha256=BHh2G68i9mrpJb-xF0YZm0NaQevcxsPixSXzLlFz6XE,3180
|
|
12
12
|
airflow/providers/openlineage/facets/AirflowDagRunFacet.json,sha256=ie6c-J3-wGgk80WDTGWePz18o6DbW--TNM7BMF4WfcU,2251
|
|
13
13
|
airflow/providers/openlineage/facets/AirflowDebugRunFacet.json,sha256=_zA5gFqGje5MOH1SmdMeA5ViOHvW_pV4oijEAvkuBbY,768
|
|
14
14
|
airflow/providers/openlineage/facets/AirflowJobFacet.json,sha256=rS9PuPWOi1Jc5B4a5qLxS_Az7Q9Eb3jVYQnN41iXDC0,1187
|
|
@@ -18,15 +18,15 @@ airflow/providers/openlineage/facets/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOF
|
|
|
18
18
|
airflow/providers/openlineage/plugins/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
|
|
19
19
|
airflow/providers/openlineage/plugins/adapter.py,sha256=rtvjPvzj9fN6Crn9Sg0VTjqUrhVqEWvXakID2538JI4,21519
|
|
20
20
|
airflow/providers/openlineage/plugins/facets.py,sha256=VvyMYR6ONkC95q5FdNmohv0scbA1Ej_B5cQ97as5GvA,4161
|
|
21
|
-
airflow/providers/openlineage/plugins/listener.py,sha256=
|
|
22
|
-
airflow/providers/openlineage/plugins/macros.py,sha256=
|
|
21
|
+
airflow/providers/openlineage/plugins/listener.py,sha256=jAbviwp3F44sst8SFJSvUWB0OnFUz4mXJg79uvRaU0Q,31014
|
|
22
|
+
airflow/providers/openlineage/plugins/macros.py,sha256=RfxkpNq78CHzfTAf9X7MQ_zRArMRu9sSD2j69fPSK7s,5265
|
|
23
23
|
airflow/providers/openlineage/plugins/openlineage.py,sha256=dP3GOVtOGAIokeaeRx2OW_c1TKAxDvATlD9OGMyXqr0,2032
|
|
24
24
|
airflow/providers/openlineage/utils/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
|
|
25
25
|
airflow/providers/openlineage/utils/selective_enable.py,sha256=YyrUQ7Djv5o46XdH83N_G8AXAZ9C_aKPa534pbNVp08,3441
|
|
26
26
|
airflow/providers/openlineage/utils/spark.py,sha256=X5liLxVLgQcgPF_0lFtQULeMOv_9dGj-HFjtZvWFgOo,7626
|
|
27
|
-
airflow/providers/openlineage/utils/sql.py,sha256=
|
|
28
|
-
airflow/providers/openlineage/utils/utils.py,sha256=
|
|
29
|
-
apache_airflow_providers_openlineage-2.
|
|
30
|
-
apache_airflow_providers_openlineage-2.
|
|
31
|
-
apache_airflow_providers_openlineage-2.
|
|
32
|
-
apache_airflow_providers_openlineage-2.
|
|
27
|
+
airflow/providers/openlineage/utils/sql.py,sha256=b_k2fUyGGWzR1eau7tgq7vKQJsR7wPQzDF8M-WRq6jk,9548
|
|
28
|
+
airflow/providers/openlineage/utils/utils.py,sha256=7Q9UHycEQ2emJrlhjIniUf9cmUNols3DxMO-V8q3QnY,32669
|
|
29
|
+
apache_airflow_providers_openlineage-2.5.0.dist-info/entry_points.txt,sha256=GAx0_i2OeZzqaiiiYuA-xchICDXiCT5kVqpKSxsOjt4,214
|
|
30
|
+
apache_airflow_providers_openlineage-2.5.0.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
|
|
31
|
+
apache_airflow_providers_openlineage-2.5.0.dist-info/METADATA,sha256=SMb2iKKQSPuwDgSJj9vqDKjJjj5l8SwZwahY1M8kBHU,5634
|
|
32
|
+
apache_airflow_providers_openlineage-2.5.0.dist-info/RECORD,,
|
|
File without changes
|