This is an automated email from the ASF dual-hosted git repository.
uranusjr pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new 9194144dab Replace Ruff setting known-third-party with
namespace-packages (#32873)
9194144dab is described below
commit 9194144dab01d1898877215379e1c019fe6f10cd
Author: Charlie Marsh <[email protected]>
AuthorDate: Thu Jul 27 01:32:43 2023 -0400
Replace Ruff setting known-third-party with namespace-packages (#32873)
---
airflow/__init__.py | 7 +++--
airflow/providers/apprise/hooks/apprise.py | 3 ++-
airflow/providers/apprise/notifications/apprise.py | 3 ++-
airflow/providers/openlineage/extractors/base.py | 4 +--
airflow/providers/openlineage/extractors/bash.py | 3 ++-
.../providers/openlineage/extractors/manager.py | 3 ++-
airflow/providers/openlineage/extractors/python.py | 3 ++-
airflow/providers/openlineage/plugins/adapter.py | 12 ++++-----
airflow/providers/openlineage/plugins/facets.py | 1 -
airflow/providers/openlineage/sqlparser.py | 6 ++---
airflow/providers/openlineage/utils/sql.py | 3 +--
airflow/providers/openlineage/utils/utils.py | 6 ++---
dev/breeze/pyproject.toml | 4 +++
pyproject.toml | 31 +++-------------------
14 files changed, 36 insertions(+), 53 deletions(-)
diff --git a/airflow/__init__.py b/airflow/__init__.py
index 2e8e088ebc..ebdd7d8777 100644
--- a/airflow/__init__.py
+++ b/airflow/__init__.py
@@ -49,8 +49,7 @@ if os.environ.get("_AIRFLOW_PATCH_GEVENT"):
# very easily cause import cycles in the conf init/validate code (since
downstream code from
# those functions likely import settings).
# configuration is therefore initted early here, simply by importing it.
-from airflow import configuration
-from airflow import settings
+from airflow import configuration, settings
__all__ = ["__version__", "login", "DAG", "PY36", "PY37", "PY38", "PY39",
"PY310", "XComArg"]
@@ -125,7 +124,7 @@ if not settings.LAZY_LOAD_PLUGINS:
STATICA_HACK = True
globals()["kcah_acitats"[::-1].upper()] = False
if STATICA_HACK: # pragma: no cover
- from airflow.models.dag import DAG
- from airflow.models.xcom_arg import XComArg
from airflow.exceptions import AirflowException
+ from airflow.models.dag import DAG
from airflow.models.dataset import Dataset
+ from airflow.models.xcom_arg import XComArg
diff --git a/airflow/providers/apprise/hooks/apprise.py
b/airflow/providers/apprise/hooks/apprise.py
index 61548be76a..5ab9e16da9 100644
--- a/airflow/providers/apprise/hooks/apprise.py
+++ b/airflow/providers/apprise/hooks/apprise.py
@@ -21,9 +21,10 @@ import json
from typing import Any, Iterable
import apprise
-from airflow.hooks.base import BaseHook
from apprise import AppriseConfig, NotifyFormat, NotifyType
+from airflow.hooks.base import BaseHook
+
class AppriseHook(BaseHook):
"""
diff --git a/airflow/providers/apprise/notifications/apprise.py
b/airflow/providers/apprise/notifications/apprise.py
index cabae9bdca..cf78d68f37 100644
--- a/airflow/providers/apprise/notifications/apprise.py
+++ b/airflow/providers/apprise/notifications/apprise.py
@@ -29,9 +29,10 @@ except ImportError:
"Failed to import BaseNotifier. This feature is only available in
Airflow versions >= 2.6.0"
)
-from airflow.providers.apprise.hooks.apprise import AppriseHook
from apprise import AppriseConfig, NotifyFormat, NotifyType
+from airflow.providers.apprise.hooks.apprise import AppriseHook
+
class AppriseNotifier(BaseNotifier):
"""
diff --git a/airflow/providers/openlineage/extractors/base.py
b/airflow/providers/openlineage/extractors/base.py
index de84f0f63f..51c9281e56 100644
--- a/airflow/providers/openlineage/extractors/base.py
+++ b/airflow/providers/openlineage/extractors/base.py
@@ -20,11 +20,11 @@ from __future__ import annotations
from abc import ABC, abstractmethod
from attrs import Factory, define
+from openlineage.client.facet import BaseFacet
+from openlineage.client.run import Dataset
from airflow.utils.log.logging_mixin import LoggingMixin
from airflow.utils.state import TaskInstanceState
-from openlineage.client.facet import BaseFacet
-from openlineage.client.run import Dataset
@define
diff --git a/airflow/providers/openlineage/extractors/bash.py
b/airflow/providers/openlineage/extractors/bash.py
index 9d7c40b114..cfb022032e 100644
--- a/airflow/providers/openlineage/extractors/bash.py
+++ b/airflow/providers/openlineage/extractors/bash.py
@@ -17,13 +17,14 @@
from __future__ import annotations
+from openlineage.client.facet import SourceCodeJobFacet
+
from airflow.providers.openlineage.extractors.base import BaseExtractor,
OperatorLineage
from airflow.providers.openlineage.plugins.facets import (
UnknownOperatorAttributeRunFacet,
UnknownOperatorInstance,
)
from airflow.providers.openlineage.utils.utils import
get_filtered_unknown_operator_keys, is_source_enabled
-from openlineage.client.facet import SourceCodeJobFacet
"""
:meta private:
diff --git a/airflow/providers/openlineage/extractors/manager.py
b/airflow/providers/openlineage/extractors/manager.py
index b22afb5fdc..02a4124840 100644
--- a/airflow/providers/openlineage/extractors/manager.py
+++ b/airflow/providers/openlineage/extractors/manager.py
@@ -173,9 +173,10 @@ class ExtractorManager(LoggingMixin):
@staticmethod
def convert_to_ol_dataset(obj):
- from airflow.lineage.entities import Table
from openlineage.client.run import Dataset
+ from airflow.lineage.entities import Table
+
if isinstance(obj, Dataset):
return obj
elif isinstance(obj, Table):
diff --git a/airflow/providers/openlineage/extractors/python.py
b/airflow/providers/openlineage/extractors/python.py
index 50d84014fd..017e6488cc 100644
--- a/airflow/providers/openlineage/extractors/python.py
+++ b/airflow/providers/openlineage/extractors/python.py
@@ -20,13 +20,14 @@ from __future__ import annotations
import inspect
from typing import Callable
+from openlineage.client.facet import SourceCodeJobFacet
+
from airflow.providers.openlineage.extractors.base import BaseExtractor,
OperatorLineage
from airflow.providers.openlineage.plugins.facets import (
UnknownOperatorAttributeRunFacet,
UnknownOperatorInstance,
)
from airflow.providers.openlineage.utils.utils import
get_filtered_unknown_operator_keys, is_source_enabled
-from openlineage.client.facet import SourceCodeJobFacet
"""
:meta private:
diff --git a/airflow/providers/openlineage/plugins/adapter.py
b/airflow/providers/openlineage/plugins/adapter.py
index 0e530e5c53..0f19aa0f14 100644
--- a/airflow/providers/openlineage/plugins/adapter.py
+++ b/airflow/providers/openlineage/plugins/adapter.py
@@ -22,12 +22,6 @@ from typing import TYPE_CHECKING
import requests.exceptions
import yaml
-
-from airflow.configuration import conf
-from airflow.providers.openlineage import __version__ as
OPENLINEAGE_PROVIDER_VERSION
-from airflow.providers.openlineage.extractors import OperatorLineage
-from airflow.providers.openlineage.utils.utils import OpenLineageRedactor
-from airflow.utils.log.logging_mixin import LoggingMixin
from openlineage.client import OpenLineageClient, set_producer
from openlineage.client.facet import (
BaseFacet,
@@ -42,6 +36,12 @@ from openlineage.client.facet import (
)
from openlineage.client.run import Job, Run, RunEvent, RunState
+from airflow.configuration import conf
+from airflow.providers.openlineage import __version__ as
OPENLINEAGE_PROVIDER_VERSION
+from airflow.providers.openlineage.extractors import OperatorLineage
+from airflow.providers.openlineage.utils.utils import OpenLineageRedactor
+from airflow.utils.log.logging_mixin import LoggingMixin
+
if TYPE_CHECKING:
from airflow.models.dagrun import DagRun
from airflow.utils.log.secrets_masker import SecretsMasker
diff --git a/airflow/providers/openlineage/plugins/facets.py
b/airflow/providers/openlineage/plugins/facets.py
index f73ff1a98b..2c301856f7 100644
--- a/airflow/providers/openlineage/plugins/facets.py
+++ b/airflow/providers/openlineage/plugins/facets.py
@@ -17,7 +17,6 @@
from __future__ import annotations
from attrs import define
-
from openlineage.client.facet import BaseFacet
from openlineage.client.utils import RedactMixin
diff --git a/airflow/providers/openlineage/sqlparser.py
b/airflow/providers/openlineage/sqlparser.py
index fdf36c94d3..2b18e28d7d 100644
--- a/airflow/providers/openlineage/sqlparser.py
+++ b/airflow/providers/openlineage/sqlparser.py
@@ -20,6 +20,9 @@ from typing import TYPE_CHECKING, Callable
import sqlparse
from attrs import define
+from openlineage.client.facet import BaseFacet, ExtractionError,
ExtractionErrorRunFacet, SqlJobFacet
+from openlineage.client.run import Dataset
+from openlineage.common.sql import DbTableMeta, SqlMeta, parse
from airflow.providers.openlineage.extractors.base import OperatorLineage
from airflow.providers.openlineage.utils.sql import (
@@ -28,9 +31,6 @@ from airflow.providers.openlineage.utils.sql import (
get_table_schemas,
)
from airflow.typing_compat import TypedDict
-from openlineage.client.facet import BaseFacet, ExtractionError,
ExtractionErrorRunFacet, SqlJobFacet
-from openlineage.client.run import Dataset
-from openlineage.common.sql import DbTableMeta, SqlMeta, parse
if TYPE_CHECKING:
from sqlalchemy.engine import Engine
diff --git a/airflow/providers/openlineage/utils/sql.py
b/airflow/providers/openlineage/utils/sql.py
index fe43a25bae..5d2fa80cd6 100644
--- a/airflow/providers/openlineage/utils/sql.py
+++ b/airflow/providers/openlineage/utils/sql.py
@@ -23,10 +23,9 @@ from enum import IntEnum
from typing import TYPE_CHECKING, Dict, List, Optional
from attrs import define
-from sqlalchemy import Column, MetaData, Table, and_, union_all
-
from openlineage.client.facet import SchemaDatasetFacet, SchemaField
from openlineage.client.run import Dataset
+from sqlalchemy import Column, MetaData, Table, and_, union_all
if TYPE_CHECKING:
from sqlalchemy.engine import Engine
diff --git a/airflow/providers/openlineage/utils/utils.py
b/airflow/providers/openlineage/utils/utils.py
index 9d1cab8eca..ca8b559e3a 100644
--- a/airflow/providers/openlineage/utils/utils.py
+++ b/airflow/providers/openlineage/utils/utils.py
@@ -29,6 +29,9 @@ from urllib.parse import parse_qsl, urlencode, urlparse,
urlunparse
import attrs
from attrs import asdict
+# TODO: move this maybe to Airflow's logic?
+from openlineage.client.utils import RedactMixin
+
from airflow.compat.functools import cache
from airflow.configuration import conf
from airflow.providers.openlineage.plugins.facets import (
@@ -37,9 +40,6 @@ from airflow.providers.openlineage.plugins.facets import (
)
from airflow.utils.log.secrets_masker import Redactable, Redacted,
SecretsMasker, should_hide_value_for_key
-# TODO: move this maybe to Airflow's logic?
-from openlineage.client.utils import RedactMixin
-
if TYPE_CHECKING:
from airflow.models import DAG, BaseOperator, Connection, DagRun,
TaskInstance
diff --git a/dev/breeze/pyproject.toml b/dev/breeze/pyproject.toml
index ca71f72a71..b18b68f803 100644
--- a/dev/breeze/pyproject.toml
+++ b/dev/breeze/pyproject.toml
@@ -33,3 +33,7 @@ python_files = [
testpaths = [
"tests",
]
+
+[tool.ruff]
+extend = "../../pyproject.toml"
+src = ["src"]
diff --git a/pyproject.toml b/pyproject.toml
index bad61144d7..de7dc5a905 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -41,7 +41,8 @@ extend-exclude = [
# The files generated by stubgen aren't 100% valid syntax it turns out,
and we don't ship them, so we can
# ignore them in ruff
"airflow/providers/common/sql/*/*.pyi",
- "airflow/migrations/versions/*.py"
+ "airflow/migrations/versions/*.py",
+ "tests/dags/test_imports.py",
]
extend-select = [
@@ -73,6 +74,8 @@ extend-ignore = [
"E731",
]
+namespace-packages = ["airflow/providers"]
+
[tool.pytest.ini_options]
# * Disable `flaky` plugin for pytest. This plugin conflicts with
`rerunfailures` because provide same marker.
# * Disable `nose` builtin plugin for pytest. This feature deprecated in 7.2
and will be removed in pytest>=8
@@ -106,39 +109,13 @@ testpaths = [
]
[tool.ruff.isort]
-known-first-party = ["airflow", "airflow_breeze", "docker_tests", "docs",
"kubernetes_tests", "tests"]
required-imports = ["from __future__ import annotations"]
combine-as-imports = true
-# TODO: for now, https://github.com/charliermarsh/ruff/issues/1817
-known-third-party = [
- "asana",
- "atlassian",
- "celery",
- "cloudant",
- "databricks",
- "datadog",
- "docker",
- "elasticsearch",
- "github",
- "google",
- "grpc",
- "jenkins",
- "mysql",
- "neo4j",
- "papermill",
- "redis",
- "sendgrid",
- "snowflake",
- "telegram",
- "trino",
-]
-
[tool.ruff.per-file-ignores]
"airflow/models/__init__.py" = ["F401"]
"airflow/models/sqla_models.py" = ["F401"]
-
# The test_python.py is needed because adding __future__.annotations breaks
runtime checks that are
# needed for the test to work
"tests/decorators/test_python.py" = ["I002"]