airbytehq / airbytehq/airbyte-python-cdk

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

オープン
#404 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
community
主要言語
Python
スター
26
フォーク
53
平均マージ
2日 6時間
マージ済み PR(30日)
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 を短くまとめたダイジェスト。