Commit b806c35f authored by George Papathanail's avatar George Papathanail
Browse files

feat(callbacks): let delivery adapters send a bearer token

parent 4be16254
Loading
Loading
Loading
Loading
Loading
+7 −6
Changes for src/open_exposure_gateway/adapters/http/callback_client.py: 7 added lines, 6 removed lines.
Original line number Diff line number Diff line
@@ -18,16 +18,17 @@ class HttpCallbackClient:
        settings = get_settings()
        self.timeout = settings.callback_settings.timeout

    async def deliver(self, sink: str, event: CallbackEvent) -> None:
    async def deliver(
        self, sink: str, event: CallbackEvent, bearer_token: str | None = None
    ) -> None:
        content: bytes = (
            _DEPLOYMENT_EVENTS_ADAPTER.dump_json(event)
            if isinstance(event, list)
            else event.model_dump_json().encode()
        )
        headers = {"Content-Type": "application/cloudevents+json"}
        if bearer_token is not None:
            headers["Authorization"] = f"Bearer {bearer_token}"
        async with httpx.AsyncClient(timeout=self.timeout) as client:
            response = await client.post(
                sink,
                content=content,
                headers={"Content-Type": "application/cloudevents+json"},
            )
            response = await client.post(sink, content=content, headers=headers)
        response.raise_for_status()
+7 −6
Changes for src/open_exposure_gateway/adapters/http/qod_callback_client.py: 7 added lines, 6 removed lines.
Original line number Diff line number Diff line
@@ -9,11 +9,12 @@ class HttpQodCallbackClient:
        settings = get_settings()
        self.timeout = settings.callback_settings.timeout

    async def deliver(self, sink: str, event: QosStatusChangedCloudEvent) -> None:
    async def deliver(
        self, sink: str, event: QosStatusChangedCloudEvent, bearer_token: str | None = None
    ) -> None:
        headers = {"Content-Type": "application/cloudevents+json"}
        if bearer_token is not None:
            headers["Authorization"] = f"Bearer {bearer_token}"
        async with httpx.AsyncClient(timeout=self.timeout) as client:
            response = await client.post(
                sink,
                content=event.model_dump_json(),
                headers={"Content-Type": "application/cloudevents+json"},
            )
            response = await client.post(sink, content=event.model_dump_json(), headers=headers)
        response.raise_for_status()
+3 −1
Changes for src/open_exposure_gateway/ports/callback_delivery_port.py: 3 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -12,4 +12,6 @@ CallbackEvent = Union[


class CallbackDeliveryPort(Protocol):
    async def deliver(self, sink: str, event: CallbackEvent) -> None: ...
    async def deliver(
        self, sink: str, event: CallbackEvent, bearer_token: str | None = None
    ) -> None: ...
+3 −1
Changes for src/open_exposure_gateway/ports/qod_callback_port.py: 3 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -4,4 +4,6 @@ from open_exposure_gateway.domain.quality_on_demand import QosStatusChangedCloud


class QodCallbackDeliveryPort(Protocol):
    async def deliver(self, sink: str, event: QosStatusChangedCloudEvent) -> None: ...
    async def deliver(
        self, sink: str, event: QosStatusChangedCloudEvent, bearer_token: str | None = None
    ) -> None: ...
+10 −2
Changes for tests/unit/fakes.py: 10 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -627,14 +627,22 @@ class FakeCallbackDeliveryRepository(CallbackDeliveryRepository):
class FakeCallbackDeliveryPort:
    def __init__(self) -> None:
        self.delivered: list[tuple[str, CallbackEvent]] = []
        self.bearer_tokens: list[str | None] = []

    async def deliver(self, sink: str, event: CallbackEvent) -> None:
    async def deliver(
        self, sink: str, event: CallbackEvent, bearer_token: str | None = None
    ) -> None:
        self.delivered.append((sink, event))
        self.bearer_tokens.append(bearer_token)


class FakeQodCallbackDeliveryPort:
    def __init__(self) -> None:
        self.delivered: list[tuple[str, QosStatusChangedCloudEvent]] = []
        self.bearer_tokens: list[str | None] = []

    async def deliver(self, sink: str, event: QosStatusChangedCloudEvent) -> None:
    async def deliver(
        self, sink: str, event: QosStatusChangedCloudEvent, bearer_token: str | None = None
    ) -> None:
        self.delivered.append((sink, event))
        self.bearer_tokens.append(bearer_token)
Loading