fix: handle missing `credential_id` (#30051)

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
This commit is contained in:
Rhys 2025-12-24 10:21:51 +07:00 committed by GitHub
parent 95330162a4
commit a5309bee25
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 17 additions and 9 deletions

View File

@ -572,7 +572,7 @@ class DocumentBatchIndexingEstimateApi(DocumentResource):
datasource_type=DatasourceType.NOTION, datasource_type=DatasourceType.NOTION,
notion_info=NotionInfo.model_validate( notion_info=NotionInfo.model_validate(
{ {
"credential_id": data_source_info["credential_id"], "credential_id": data_source_info.get("credential_id"),
"notion_workspace_id": data_source_info["notion_workspace_id"], "notion_workspace_id": data_source_info["notion_workspace_id"],
"notion_obj_id": data_source_info["notion_page_id"], "notion_obj_id": data_source_info["notion_page_id"],
"notion_page_type": data_source_info["type"], "notion_page_type": data_source_info["type"],

View File

@ -396,7 +396,7 @@ class IndexingRunner:
datasource_type=DatasourceType.NOTION, datasource_type=DatasourceType.NOTION,
notion_info=NotionInfo.model_validate( notion_info=NotionInfo.model_validate(
{ {
"credential_id": data_source_info["credential_id"], "credential_id": data_source_info.get("credential_id"),
"notion_workspace_id": data_source_info["notion_workspace_id"], "notion_workspace_id": data_source_info["notion_workspace_id"],
"notion_obj_id": data_source_info["notion_page_id"], "notion_obj_id": data_source_info["notion_page_id"],
"notion_page_type": data_source_info["type"], "notion_page_type": data_source_info["type"],

View File

@ -48,13 +48,21 @@ class NotionExtractor(BaseExtractor):
if notion_access_token: if notion_access_token:
self._notion_access_token = notion_access_token self._notion_access_token = notion_access_token
else: else:
self._notion_access_token = self._get_access_token(tenant_id, self._credential_id) try:
if not self._notion_access_token: self._notion_access_token = self._get_access_token(tenant_id, self._credential_id)
except Exception as e:
logger.warning(
(
"Failed to get Notion access token from datasource credentials: %s, "
"falling back to environment variable NOTION_INTEGRATION_TOKEN"
),
e,
)
integration_token = dify_config.NOTION_INTEGRATION_TOKEN integration_token = dify_config.NOTION_INTEGRATION_TOKEN
if integration_token is None: if integration_token is None:
raise ValueError( raise ValueError(
"Must specify `integration_token` or set environment variable `NOTION_INTEGRATION_TOKEN`." "Must specify `integration_token` or set environment variable `NOTION_INTEGRATION_TOKEN`."
) ) from e
self._notion_access_token = integration_token self._notion_access_token = integration_token

View File

@ -96,7 +96,7 @@ class TestNotionExtractorAuthentication:
def test_init_with_integration_token_fallback(self, mock_get_token, mock_config, mock_document_model): def test_init_with_integration_token_fallback(self, mock_get_token, mock_config, mock_document_model):
"""Test NotionExtractor falls back to integration token when credential not found.""" """Test NotionExtractor falls back to integration token when credential not found."""
# Arrange # Arrange
mock_get_token.return_value = None mock_get_token.side_effect = Exception("No credential id found")
mock_config.NOTION_INTEGRATION_TOKEN = "integration-token-fallback" mock_config.NOTION_INTEGRATION_TOKEN = "integration-token-fallback"
# Act # Act
@ -105,7 +105,7 @@ class TestNotionExtractorAuthentication:
notion_obj_id="page-456", notion_obj_id="page-456",
notion_page_type="page", notion_page_type="page",
tenant_id="tenant-789", tenant_id="tenant-789",
credential_id="cred-123", credential_id=None,
document_model=mock_document_model, document_model=mock_document_model,
) )
@ -117,7 +117,7 @@ class TestNotionExtractorAuthentication:
def test_init_missing_credentials_raises_error(self, mock_get_token, mock_config, mock_document_model): def test_init_missing_credentials_raises_error(self, mock_get_token, mock_config, mock_document_model):
"""Test NotionExtractor raises error when no credentials available.""" """Test NotionExtractor raises error when no credentials available."""
# Arrange # Arrange
mock_get_token.return_value = None mock_get_token.side_effect = Exception("No credential id found")
mock_config.NOTION_INTEGRATION_TOKEN = None mock_config.NOTION_INTEGRATION_TOKEN = None
# Act & Assert # Act & Assert
@ -127,7 +127,7 @@ class TestNotionExtractorAuthentication:
notion_obj_id="page-456", notion_obj_id="page-456",
notion_page_type="page", notion_page_type="page",
tenant_id="tenant-789", tenant_id="tenant-789",
credential_id="cred-123", credential_id=None,
document_model=mock_document_model, document_model=mock_document_model,
) )
assert "Must specify `integration_token`" in str(exc_info.value) assert "Must specify `integration_token`" in str(exc_info.value)