airbytehq / airbytehq/airbyte-python-cdk

[Declarative Source] SessionTokenProvider should support reading session token from text/plain auth response

未关闭
#404 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
community
主要语言
Python
星标
26
派生
53
平均合并
2 天 6 小时
30 天内合并 PR
10

描述

## Component
SessionTokenProvider

## Relevant information
Currently, the [SessionTokenProvider](https://github.com/airbytehq/airbyte-python-cdk/blob/969dec1d2f2f22d821b3abcb420c149e0354ed35/airbyte_cdk/sources/declarative/auth/token_provider.py#L32) used in the SessionTokenAuthenticator only supports reading the session token from [JSON/XML](https://github.com/airbytehq/airbyte-python-cdk/blob/969dec1d2f2f22d821b3abcb420c149e0354ed35/airbyte_cdk/sources/declarative/models/declarative_component_schema.py#L2062). This limits compatibility with older / legacy APIs which sometimes return the session token in the body as text/plain.

e.g. see [slack thread](https://airbytehq.slack.com/archives/C027KKE4BCZ/p1741577205250339) in Community Slack channel.

## Proposed solution
Provide a dummy TextDecoder class which can be used in token [refresh method](https://github.com/airbytehq/airbyte-python-cdk/blob/969dec1d2f2f22d821b3abcb420c149e0354ed35/airbyte_cdk/sources/declarative/auth/token_provider.py#L66) to conditional return response.text if decoder isinstance of TextDecoder.

```
class SessionTokenProvider(TokenProvider):
...

def _refresh(self) -> None:
response = self.login_requester.send_request(
log_formatter=lambda response: format_http_message(
response,
"Login request",
"Obtains session token",
None,
is_auxiliary=True,
type="AUTH",
),
)
if response is None:
raise ReadException("Failed to get session token, response got ignored by requester")
session_token = dpath.get(next(self.decoder.decode(response)), self.session_token_path) if not isinstance(self.decoder, TextDecoder) else response.text
if self.expiration_duration is not None:
self._next_expiration_time = ab_datetime_now() + self.expiration_duration
self._token = session_token # type: ignore # Returned decoded response will be Mapping and therefore session_token will be str or None
```

✅ Yes, I want to contribute

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。