You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by el...@apache.org on 2025/04/17 11:27:23 UTC
(airflow) branch main updated: Replace pdpyras with pagerduty library (#48919)
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 47722929d27 Replace pdpyras with pagerduty library (#48919)
47722929d27 is described below
commit 47722929d2711199c3ed6a10e1fb0e9d0f6a995b
Author: simonprydden <72...@users.noreply.github.com>
AuthorDate: Thu Apr 17 12:27:16 2025 +0100
Replace pdpyras with pagerduty library (#48919)
* refactor(pagerduty): replace pdpyras with pagerduty
* Update changelog for PagerDuty integration changes in version 5.0.0
* refactor(pagerduty): replace pdpyras with pagerduty
* fix rebase error
---------
Co-authored-by: Simon Prydden <me...@aol.com>
---
providers/pagerduty/README.rst | 2 +-
providers/pagerduty/docs/changelog.rst | 12 +++++++++++
providers/pagerduty/pyproject.toml | 2 +-
.../airflow/providers/pagerduty/hooks/pagerduty.py | 23 ++++++++++------------
.../providers/pagerduty/hooks/pagerduty_events.py | 16 +++++++--------
.../tests/unit/pagerduty/hooks/test_pagerduty.py | 4 ++--
.../unit/pagerduty/hooks/test_pagerduty_events.py | 8 +++++---
7 files changed, 39 insertions(+), 28 deletions(-)
diff --git a/providers/pagerduty/README.rst b/providers/pagerduty/README.rst
index 1b4f8128af5..d1c34ab882f 100644
--- a/providers/pagerduty/README.rst
+++ b/providers/pagerduty/README.rst
@@ -55,7 +55,7 @@ PIP package Version required
========================================== ==================
``apache-airflow`` ``>=2.9.0``
``apache-airflow-providers-common-compat`` ``>=1.6.0``
-``pdpyras`` ``>=4.2.0``
+``pagerduty`` ``>=1.0.0``
========================================== ==================
Cross provider package dependencies
diff --git a/providers/pagerduty/docs/changelog.rst b/providers/pagerduty/docs/changelog.rst
index f4382ab4cfc..d4b48167775 100644
--- a/providers/pagerduty/docs/changelog.rst
+++ b/providers/pagerduty/docs/changelog.rst
@@ -27,6 +27,18 @@
Changelog
---------
+5.0.0
+.....
+
+Breaking changes
+~~~~~~~~~~~~~~~~
+
+* ``Replace pdpyras with pagerduty library in PagerDuty integration (#48919)``
+
+In the PagerDutyHook the get_session method has been renamed with the client method to
+align with standard naming conventions.
+Update any references to PagerDutyHook.get_session in your code to use PagerDutyHook.client.
+
4.0.3
.....
diff --git a/providers/pagerduty/pyproject.toml b/providers/pagerduty/pyproject.toml
index f201ec4c80b..ad43c3d6fd4 100644
--- a/providers/pagerduty/pyproject.toml
+++ b/providers/pagerduty/pyproject.toml
@@ -59,7 +59,7 @@ requires-python = "~=3.9"
dependencies = [
"apache-airflow>=2.9.0",
"apache-airflow-providers-common-compat>=1.6.0",
- "pdpyras>=4.2.0",
+ "pagerduty>=1.0.0",
]
[dependency-groups]
diff --git a/providers/pagerduty/src/airflow/providers/pagerduty/hooks/pagerduty.py b/providers/pagerduty/src/airflow/providers/pagerduty/hooks/pagerduty.py
index de917893743..d0172615b57 100644
--- a/providers/pagerduty/src/airflow/providers/pagerduty/hooks/pagerduty.py
+++ b/providers/pagerduty/src/airflow/providers/pagerduty/hooks/pagerduty.py
@@ -21,7 +21,7 @@ from __future__ import annotations
from typing import Any
-import pdpyras
+import pagerduty
from airflow.exceptions import AirflowException
from airflow.hooks.base import BaseHook
@@ -79,7 +79,7 @@ class PagerdutyHook(BaseHook):
def __init__(self, token: str | None = None, pagerduty_conn_id: str | None = None) -> None:
super().__init__()
self.routing_key = None
- self._session = None
+ self._client = None
if pagerduty_conn_id is not None:
conn = self.get_connection(pagerduty_conn_id)
@@ -95,23 +95,20 @@ class PagerdutyHook(BaseHook):
if self.token is None:
raise AirflowException("Cannot get token: No valid api token nor pagerduty_conn_id supplied.")
- def get_session(self) -> pdpyras.APISession:
+ def client(self) -> pagerduty.RestApiV2Client:
"""
- Return `pdpyras.APISession` for use with sending or receiving data through the PagerDuty REST API.
+ Return `pagerduty.RestApiV2Client` for use with sending or receiving data through the PagerDuty REST API.
- The `pdpyras` library supplies a class `pdpyras.APISession` extending `requests.Session` from the
- Requests HTTP library.
-
- Documentation on how to use the `APISession` class can be found at:
- https://pagerduty.github.io/pdpyras/#data-access-abstraction
+ Documentation on how to use the `RestApiV2Client` class can be found at:
+ https://pagerduty.github.io/python-pagerduty/user_guide.html#generic-client-features
"""
- self._session = pdpyras.APISession(self.token)
- return self._session
+ self._client = pagerduty.RestApiV2Client(self.token)
+ return self._client
def test_connection(self):
try:
- session = pdpyras.APISession(self.token)
- session.list_all("services", params={"query": "some_non_existing_service"})
+ client = pagerduty.RestApiV2Client(self.token)
+ client.list_all("services", params={"query": "some_non_existing_service"})
except Exception:
return False, "connection test failed, invalid token"
return True, "connection tested successfully"
diff --git a/providers/pagerduty/src/airflow/providers/pagerduty/hooks/pagerduty_events.py b/providers/pagerduty/src/airflow/providers/pagerduty/hooks/pagerduty_events.py
index d052825974c..61ad9930b3d 100644
--- a/providers/pagerduty/src/airflow/providers/pagerduty/hooks/pagerduty_events.py
+++ b/providers/pagerduty/src/airflow/providers/pagerduty/hooks/pagerduty_events.py
@@ -21,7 +21,7 @@ from __future__ import annotations
from typing import TYPE_CHECKING, Any
-import pdpyras
+import pagerduty
from airflow.exceptions import AirflowException
from airflow.hooks.base import BaseHook
@@ -62,7 +62,7 @@ class PagerdutyEventsHook(BaseHook):
) -> None:
super().__init__()
self.integration_key = None
- self._session = None
+ self._client = None
if pagerduty_events_conn_id is not None:
conn = self.get_connection(pagerduty_events_conn_id)
@@ -132,8 +132,8 @@ class PagerdutyEventsHook(BaseHook):
links=links,
)
- session = pdpyras.EventsAPISession(self.integration_key)
- return session.send_event(**data)
+ client = pagerduty.EventsApiV2Client(self.integration_key)
+ return client.send_event(**data)
@staticmethod
def prepare_event_data(
@@ -225,13 +225,13 @@ class PagerdutyEventsHook(BaseHook):
if links is not None:
data["links"] = links
- session = pdpyras.ChangeEventsAPISession(self.integration_key)
- return session.send_change_event(payload=payload, links=links)
+ client = pagerduty.EventsApiV2Client(self.integration_key)
+ return client.send_change_event(payload=payload, links=links)
def test_connection(self):
try:
- session = pdpyras.EventsAPISession(self.integration_key)
- session.resolve("some_dedup_key_that_dont_exist")
+ client = pagerduty.EventsApiV2Client(self.integration_key)
+ client.resolve("some_dedup_key_that_dont_exist")
except Exception:
return False, "connection test failed, invalid routing key"
return True, "connection tested successfully"
diff --git a/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty.py b/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty.py
index f642f4a09df..e5aaa66dafa 100644
--- a/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty.py
+++ b/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty.py
@@ -72,6 +72,6 @@ class TestPagerdutyHook:
"self": "https://api.pagerduty.com/services/PZYX321",
}
requests_mock.get("https://api.pagerduty.com/services/PZYX321", json={"service": mock_response_body})
- session = hook.get_session()
- resp = session.rget("/services/PZYX321")
+ client = hook.client()
+ resp = client.rget("/services/PZYX321")
assert resp == mock_response_body
diff --git a/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty_events.py b/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty_events.py
index 3e4ecb23058..c8037be4afe 100644
--- a/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty_events.py
+++ b/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty_events.py
@@ -44,11 +44,13 @@ class TestPagerdutyEventsHook:
def test_create_change_event(self, requests_mock, events_connections):
hook = PagerdutyEventsHook(pagerduty_events_conn_id=DEFAULT_CONN_ID)
- change_event_id = "change_event_id"
- mock_response_body = {"id": change_event_id}
+ mock_response_body = {
+ "message": "Change event processed",
+ "status": "success",
+ }
requests_mock.post("https://events.pagerduty.com/v2/change/enqueue", json=mock_response_body)
resp = hook.create_change_event(summary="test", source="airflow")
- assert resp == change_event_id
+ assert resp is None, "No response expected for change event"
def test_send_event(self, requests_mock, events_connections):
hook = PagerdutyEventsHook(pagerduty_events_conn_id=DEFAULT_CONN_ID)