This is an automated email from the ASF dual-hosted git repository.
eladkal 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 d57ebb7 Organize Opsgenie provider classes (#20454)
d57ebb7 is described below
commit d57ebb7aed3b09101d46d1c169851cfd22be69a5
Author: eladkal <[email protected]>
AuthorDate: Wed Dec 22 11:12:52 2021 +0200
Organize Opsgenie provider classes (#20454)
* organize Opsgenie provider classes
---
airflow/contrib/hooks/opsgenie_alert_hook.py | 6 +-
.../contrib/operators/opsgenie_alert_operator.py | 6 +-
.../example_dags/example_opsgenie_alert.py | 2 +-
.../hooks/{opsgenie_alert.py => opsgenie.py} | 0
airflow/providers/opsgenie/hooks/opsgenie_alert.py | 88 ++------------
.../operators/{opsgenie_alert.py => opsgenie.py} | 2 +-
.../providers/opsgenie/operators/opsgenie_alert.py | 132 ++-------------------
airflow/providers/opsgenie/provider.yaml | 6 +-
dev/provider_packages/prepare_provider_packages.py | 2 +
.../operators/opsgenie_alert.rst | 2 +-
tests/deprecated_classes.py | 4 +-
.../{test_opsgenie_alert.py => test_opsgenie.py} | 2 +-
.../{test_opsgenie_alert.py => test_opsgenie.py} | 2 +-
13 files changed, 35 insertions(+), 219 deletions(-)
diff --git a/airflow/contrib/hooks/opsgenie_alert_hook.py
b/airflow/contrib/hooks/opsgenie_alert_hook.py
index a65de9c..abd9c89 100644
--- a/airflow/contrib/hooks/opsgenie_alert_hook.py
+++ b/airflow/contrib/hooks/opsgenie_alert_hook.py
@@ -15,14 +15,14 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
-"""This module is deprecated. Please use
:mod:`airflow.providers.opsgenie.hooks.opsgenie_alert`."""
+"""This module is deprecated. Please use
:mod:`airflow.providers.opsgenie.hooks.opsgenie`."""
import warnings
-from airflow.providers.opsgenie.hooks.opsgenie_alert import OpsgenieAlertHook
# noqa
+from airflow.providers.opsgenie.hooks.opsgenie import OpsgenieAlertHook # noqa
warnings.warn(
- "This module is deprecated. Please use
`airflow.providers.opsgenie.hooks.opsgenie_alert`.",
+ "This module is deprecated. Please use
`airflow.providers.opsgenie.hooks.opsgenie`.",
DeprecationWarning,
stacklevel=2,
)
diff --git a/airflow/contrib/operators/opsgenie_alert_operator.py
b/airflow/contrib/operators/opsgenie_alert_operator.py
index b8ce1dd..81d5fe5 100644
--- a/airflow/contrib/operators/opsgenie_alert_operator.py
+++ b/airflow/contrib/operators/opsgenie_alert_operator.py
@@ -15,14 +15,14 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
-"""This module is deprecated. Please use
:mod:`airflow.providers.opsgenie.operators.opsgenie_alert`."""
+"""This module is deprecated. Please use
:mod:`airflow.providers.opsgenie.operators.opsgenie`."""
import warnings
-from airflow.providers.opsgenie.operators.opsgenie_alert import
OpsgenieAlertOperator # noqa
+from airflow.providers.opsgenie.operators.opsgenie import
OpsgenieAlertOperator # noqa
warnings.warn(
- "This module is deprecated. Please use
`airflow.providers.opsgenie.operators.opsgenie_alert`.",
+ "This module is deprecated. Please use
`airflow.providers.opsgenie.operators.opsgenie`.",
DeprecationWarning,
stacklevel=2,
)
diff --git a/airflow/providers/opsgenie/example_dags/example_opsgenie_alert.py
b/airflow/providers/opsgenie/example_dags/example_opsgenie_alert.py
index a39d356..72f2db3 100644
--- a/airflow/providers/opsgenie/example_dags/example_opsgenie_alert.py
+++ b/airflow/providers/opsgenie/example_dags/example_opsgenie_alert.py
@@ -17,7 +17,7 @@
from datetime import datetime
from airflow import DAG
-from airflow.providers.opsgenie.operators.opsgenie_alert import
OpsgenieAlertOperator
+from airflow.providers.opsgenie.operators.opsgenie import OpsgenieAlertOperator
with DAG(
dag_id="opsgenie_alert_operator_dag",
diff --git a/airflow/providers/opsgenie/hooks/opsgenie_alert.py
b/airflow/providers/opsgenie/hooks/opsgenie.py
similarity index 100%
copy from airflow/providers/opsgenie/hooks/opsgenie_alert.py
copy to airflow/providers/opsgenie/hooks/opsgenie.py
diff --git a/airflow/providers/opsgenie/hooks/opsgenie_alert.py
b/airflow/providers/opsgenie/hooks/opsgenie_alert.py
index c3baae3..abd9c89 100644
--- a/airflow/providers/opsgenie/hooks/opsgenie_alert.py
+++ b/airflow/providers/opsgenie/hooks/opsgenie_alert.py
@@ -15,86 +15,14 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
-#
-
-from typing import Optional
-
-from opsgenie_sdk import (
- AlertApi,
- ApiClient,
- Configuration,
- CreateAlertPayload,
- OpenApiException,
- SuccessResponse,
-)
-
-from airflow.hooks.base import BaseHook
-
-
-class OpsgenieAlertHook(BaseHook):
- """
- This hook allows you to post alerts to Opsgenie.
- Accepts a connection that has an Opsgenie API key as the connection's
password.
- This hook sets the domain to conn_id.host, and if not set will default
- to ``https://api.opsgenie.com``.
-
- Each Opsgenie API key can be pre-configured to a team integration.
- You can override these defaults in this hook.
-
- :param opsgenie_conn_id: The name of the Opsgenie connection to use
- :type opsgenie_conn_id: str
+"""This module is deprecated. Please use
:mod:`airflow.providers.opsgenie.hooks.opsgenie`."""
- """
+import warnings
- conn_name_attr = 'opsgenie_conn_id'
- default_conn_name = 'opsgenie_default'
- conn_type = 'opsgenie'
- hook_name = 'Opsgenie'
+from airflow.providers.opsgenie.hooks.opsgenie import OpsgenieAlertHook # noqa
- def __init__(self, opsgenie_conn_id: str = 'opsgenie_default') -> None:
- super().__init__() # type: ignore[misc]
- self.conn_id = opsgenie_conn_id
- configuration = Configuration()
- conn = self.get_connection(self.conn_id)
- configuration.api_key['Authorization'] = conn.password
- configuration.host = conn.host or 'https://api.opsgenie.com'
- self.alert_api_instance = AlertApi(ApiClient(configuration))
-
- def _get_api_key(self) -> str:
- """
- Get the API key from the connection
-
- :return: API key
- :rtype: str
- """
- conn = self.get_connection(self.conn_id)
- return conn.password
-
- def get_conn(self) -> AlertApi:
- """
- Get the underlying AlertApi client
-
- :return: AlertApi client
- :rtype: opsgenie_sdk.AlertApi
- """
- return self.alert_api_instance
-
- def create_alert(self, payload: Optional[dict] = None) -> SuccessResponse:
- """
- Create an alert on Opsgenie
-
- :param payload: Opsgenie API Create Alert payload values
- See https://docs.opsgenie.com/docs/alert-api#section-create-alert
- :type payload: dict
- :return: api response
- :rtype: opsgenie_sdk.SuccessResponse
- """
- payload = payload or {}
-
- try:
- create_alert_payload = CreateAlertPayload(**payload)
- api_response =
self.alert_api_instance.create_alert(create_alert_payload)
- return api_response
- except OpenApiException as e:
- self.log.exception('Exception when sending alert to opsgenie with
payload: %s', payload)
- raise e
+warnings.warn(
+ "This module is deprecated. Please use
`airflow.providers.opsgenie.hooks.opsgenie`.",
+ DeprecationWarning,
+ stacklevel=2,
+)
diff --git a/airflow/providers/opsgenie/operators/opsgenie_alert.py
b/airflow/providers/opsgenie/operators/opsgenie.py
similarity index 98%
copy from airflow/providers/opsgenie/operators/opsgenie_alert.py
copy to airflow/providers/opsgenie/operators/opsgenie.py
index 7554f88..739cf06 100644
--- a/airflow/providers/opsgenie/operators/opsgenie_alert.py
+++ b/airflow/providers/opsgenie/operators/opsgenie.py
@@ -19,7 +19,7 @@
from typing import Any, Dict, List, Optional
from airflow.models import BaseOperator
-from airflow.providers.opsgenie.hooks.opsgenie_alert import OpsgenieAlertHook
+from airflow.providers.opsgenie.hooks.opsgenie import OpsgenieAlertHook
class OpsgenieAlertOperator(BaseOperator):
diff --git a/airflow/providers/opsgenie/operators/opsgenie_alert.py
b/airflow/providers/opsgenie/operators/opsgenie_alert.py
index 7554f88..81d5fe5 100644
--- a/airflow/providers/opsgenie/operators/opsgenie_alert.py
+++ b/airflow/providers/opsgenie/operators/opsgenie_alert.py
@@ -15,130 +15,14 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
-#
-from typing import Any, Dict, List, Optional
-
-from airflow.models import BaseOperator
-from airflow.providers.opsgenie.hooks.opsgenie_alert import OpsgenieAlertHook
-
-
-class OpsgenieAlertOperator(BaseOperator):
- """
- This operator allows you to post alerts to Opsgenie.
- Accepts a connection that has an Opsgenie API key as the connection's
password.
- This operator sets the domain to conn_id.host, and if not set will default
- to ``https://api.opsgenie.com``.
-
- Each Opsgenie API key can be pre-configured to a team integration.
- You can override these defaults in this operator.
-
- .. seealso::
- For more information on how to use this operator, take a look at the
guide:
- :ref:`howto/operator:OpsgenieAlertOperator`
-
- :param opsgenie_conn_id: The name of the Opsgenie connection to use
- :type opsgenie_conn_id: str
- :param message: The Message of the Opsgenie alert (templated)
- :type message: str
- :param alias: Client-defined identifier of the alert (templated)
- :type alias: str
- :param description: Description field of the alert (templated)
- :type description: str
- :param responders: Teams, users, escalations and schedules that
- the alert will be routed to send notifications.
- :type responders: list[dict]
- :param visible_to: Teams and users that the alert will become visible
- to without sending any notification.
- :type visible_to: list[dict]
- :param actions: Custom actions that will be available for the alert.
- :type actions: list[str]
- :param tags: Tags of the alert.
- :type tags: list[str]
- :param details: Map of key-value pairs to use as custom properties of the
alert.
- :type details: dict
- :param entity: Entity field of the alert that is
- generally used to specify which domain alert is related to. (templated)
- :type entity: str
- :param source: Source field of the alert. Default value is
- IP address of the incoming request.
- :type source: str
- :param priority: Priority level of the alert. Default value is P3.
(templated)
- :type priority: str
- :param user: Display name of the request owner.
- :type user: str
- :param note: Additional note that will be added while creating the alert.
(templated)
- :type note: str
- """
-
- template_fields = ('message', 'alias', 'description', 'entity',
'priority', 'note')
-
- def __init__(
- self,
- *,
- message: str,
- opsgenie_conn_id: str = 'opsgenie_default',
- alias: Optional[str] = None,
- description: Optional[str] = None,
- responders: Optional[List[dict]] = None,
- visible_to: Optional[List[dict]] = None,
- actions: Optional[List[str]] = None,
- tags: Optional[List[str]] = None,
- details: Optional[dict] = None,
- entity: Optional[str] = None,
- source: Optional[str] = None,
- priority: Optional[str] = None,
- user: Optional[str] = None,
- note: Optional[str] = None,
- **kwargs,
- ) -> None:
- super().__init__(**kwargs)
-
- self.message = message
- self.opsgenie_conn_id = opsgenie_conn_id
- self.alias = alias
- self.description = description
- self.responders = responders
- self.visible_to = visible_to
- self.actions = actions
- self.tags = tags
- self.details = details
- self.entity = entity
- self.source = source
- self.priority = priority
- self.user = user
- self.note = note
- self.hook: Optional[OpsgenieAlertHook] = None
-
- def _build_opsgenie_payload(self) -> Dict[str, Any]:
- """
- Construct the Opsgenie JSON payload. All relevant parameters are
combined here
- to a valid Opsgenie JSON payload.
+"""This module is deprecated. Please use
:mod:`airflow.providers.opsgenie.operators.opsgenie`."""
- :return: Opsgenie payload (dict) to send
- """
- payload = {}
+import warnings
- for key in [
- "message",
- "alias",
- "description",
- "responders",
- "visible_to",
- "actions",
- "tags",
- "details",
- "entity",
- "source",
- "priority",
- "user",
- "note",
- ]:
- val = getattr(self, key)
- if val:
- payload[key] = val
- return payload
+from airflow.providers.opsgenie.operators.opsgenie import
OpsgenieAlertOperator # noqa
- def execute(self, context) -> None:
- """Call the OpsgenieAlertHook to post message"""
- self.hook = OpsgenieAlertHook(self.opsgenie_conn_id)
- self.hook.create_alert(self._build_opsgenie_payload())
+warnings.warn(
+ "This module is deprecated. Please use
`airflow.providers.opsgenie.operators.opsgenie`.",
+ DeprecationWarning,
+ stacklevel=2,
+)
diff --git a/airflow/providers/opsgenie/provider.yaml
b/airflow/providers/opsgenie/provider.yaml
index eb2d5ba..0f1dede 100644
--- a/airflow/providers/opsgenie/provider.yaml
+++ b/airflow/providers/opsgenie/provider.yaml
@@ -43,15 +43,17 @@ operators:
- integration-name: Opsgenie
python-modules:
- airflow.providers.opsgenie.operators.opsgenie_alert
+ - airflow.providers.opsgenie.operators.opsgenie
hooks:
- integration-name: Opsgenie
python-modules:
- airflow.providers.opsgenie.hooks.opsgenie_alert
+ - airflow.providers.opsgenie.hooks.opsgenie
hook-class-names: # deprecated - to be removed after providers add dependency
on Airflow 2.2.0+
- - airflow.providers.opsgenie.hooks.opsgenie_alert.OpsgenieAlertHook
+ - airflow.providers.opsgenie.hooks.opsgenie.OpsgenieAlertHook
connection-types:
- - hook-class-name:
airflow.providers.opsgenie.hooks.opsgenie_alert.OpsgenieAlertHook
+ - hook-class-name:
airflow.providers.opsgenie.hooks.opsgenie.OpsgenieAlertHook
connection-type: opsgenie
diff --git a/dev/provider_packages/prepare_provider_packages.py
b/dev/provider_packages/prepare_provider_packages.py
index 0b534c2..7432bc0 100755
--- a/dev/provider_packages/prepare_provider_packages.py
+++ b/dev/provider_packages/prepare_provider_packages.py
@@ -2174,6 +2174,8 @@ KNOWN_DEPRECATED_DIRECT_IMPORTS: Set[str] = {
'This module is deprecated. Please use
`airflow.providers.amazon.aws.operators.sagemaker`.',
'This module is deprecated. Please use
`airflow.providers.amazon.aws.sensors.sagemaker`.',
'This module is deprecated. Please use
`airflow.providers.amazon.aws.hooks.emr`.',
+ 'This module is deprecated. Please use
`airflow.providers.opsgenie.hooks.opsgenie`.',
+ 'This module is deprecated. Please use
`airflow.providers.opsgenie.operators.opsgenie`.',
}
diff --git
a/docs/apache-airflow-providers-opsgenie/operators/opsgenie_alert.rst
b/docs/apache-airflow-providers-opsgenie/operators/opsgenie_alert.rst
index 7f6d094..2c0f0a4 100644
--- a/docs/apache-airflow-providers-opsgenie/operators/opsgenie_alert.rst
+++ b/docs/apache-airflow-providers-opsgenie/operators/opsgenie_alert.rst
@@ -20,7 +20,7 @@
OpsgenieAlertOperator
==========================
-Use the
:class:`~airflow.providers.opsgenie.operators.opsgenie_alert.OpsgenieAlertOperator`
to send an alert to opsgenie.
+Use the
:class:`~airflow.providers.opsgenie.operators.opsgenie.OpsgenieAlertOperator`
to send an alert to opsgenie.
Using the Operator
diff --git a/tests/deprecated_classes.py b/tests/deprecated_classes.py
index 310c7d6..0fb0063 100644
--- a/tests/deprecated_classes.py
+++ b/tests/deprecated_classes.py
@@ -344,7 +344,7 @@ HOOKS = [
'airflow.contrib.hooks.jira_hook.JiraHook',
),
(
- 'airflow.providers.opsgenie.hooks.opsgenie_alert.OpsgenieAlertHook',
+ 'airflow.providers.opsgenie.hooks.opsgenie.OpsgenieAlertHook',
'airflow.contrib.hooks.opsgenie_alert_hook.OpsgenieAlertHook',
),
(
@@ -1304,7 +1304,7 @@ OPERATORS = [
'airflow.contrib.operators.jenkins_job_trigger_operator.JenkinsJobTriggerOperator',
),
(
-
'airflow.providers.opsgenie.operators.opsgenie_alert.OpsgenieAlertOperator',
+ 'airflow.providers.opsgenie.operators.opsgenie.OpsgenieAlertOperator',
'airflow.contrib.operators.opsgenie_alert_operator.OpsgenieAlertOperator',
),
(
diff --git a/tests/providers/opsgenie/hooks/test_opsgenie_alert.py
b/tests/providers/opsgenie/hooks/test_opsgenie.py
similarity index 98%
rename from tests/providers/opsgenie/hooks/test_opsgenie_alert.py
rename to tests/providers/opsgenie/hooks/test_opsgenie.py
index a03b350..6373dc1 100644
--- a/tests/providers/opsgenie/hooks/test_opsgenie_alert.py
+++ b/tests/providers/opsgenie/hooks/test_opsgenie.py
@@ -24,7 +24,7 @@ from opsgenie_sdk import AlertApi, CreateAlertPayload
from opsgenie_sdk.exceptions import AuthenticationException
from airflow.models import Connection
-from airflow.providers.opsgenie.hooks.opsgenie_alert import OpsgenieAlertHook
+from airflow.providers.opsgenie.hooks.opsgenie import OpsgenieAlertHook
from airflow.utils import db
diff --git a/tests/providers/opsgenie/operators/test_opsgenie_alert.py
b/tests/providers/opsgenie/operators/test_opsgenie.py
similarity index 98%
rename from tests/providers/opsgenie/operators/test_opsgenie_alert.py
rename to tests/providers/opsgenie/operators/test_opsgenie.py
index 321ba75..6ee6599 100644
--- a/tests/providers/opsgenie/operators/test_opsgenie_alert.py
+++ b/tests/providers/opsgenie/operators/test_opsgenie.py
@@ -20,7 +20,7 @@
import unittest
from airflow.models.dag import DAG
-from airflow.providers.opsgenie.operators.opsgenie_alert import
OpsgenieAlertOperator
+from airflow.providers.opsgenie.operators.opsgenie import OpsgenieAlertOperator
from airflow.utils import timezone
DEFAULT_DATE = timezone.datetime(2017, 1, 1)