Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions lib/crewai-files/src/crewai_files/uploaders/factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

from typing_extensions import NotRequired, Unpack

from crewai_files.processing.exceptions import PermanentUploadError
from crewai_files.uploaders.anthropic import AnthropicFileUploader
from crewai_files.uploaders.bedrock import BedrockFileUploader
from crewai_files.uploaders.gemini import GeminiFileUploader
Expand Down Expand Up @@ -196,7 +197,11 @@ def get_uploader(
"Bedrock S3 uploader not configured. "
"Set CREWAI_BEDROCK_S3_BUCKET environment variable to enable."
)
raise
raise PermanentUploadError(
"Bedrock S3 uploader not configured. Set the "
"CREWAI_BEDROCK_S3_BUCKET environment variable or pass "
"bucket_name to enable it."
)
try:
from crewai_files.uploaders.bedrock import BedrockFileUploader

Expand All @@ -213,4 +218,4 @@ def get_uploader(
raise

logger.debug(f"No file uploader available for provider: {provider}")
raise
raise PermanentUploadError(f"No file uploader available for provider: {provider}")
30 changes: 30 additions & 0 deletions lib/crewai-files/tests/uploaders/test_factory.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
"""Tests for get_uploader error handling."""

import pytest

from crewai_files.processing.exceptions import PermanentUploadError
from crewai_files.uploaders.factory import get_uploader


def test_get_uploader_unsupported_provider_raises_permanent_upload_error() -> None:
"""
An unsupported provider must raise PermanentUploadError, not a bare
``RuntimeError: No active exception to re-raise``.

The final ``raise`` in get_uploader was a bare re-raise outside any
except block, so Python raised RuntimeError instead of a meaningful error.
"""
with pytest.raises(PermanentUploadError, match="not-a-real-provider"):
get_uploader("not-a-real-provider")


def test_get_uploader_bedrock_without_bucket_raises_permanent_upload_error(
monkeypatch: pytest.MonkeyPatch,
) -> None:
"""
Requesting the Bedrock uploader without a configured bucket must raise
PermanentUploadError (a config error), not a bare RuntimeError.
"""
monkeypatch.delenv("CREWAI_BEDROCK_S3_BUCKET", raising=False)
with pytest.raises(PermanentUploadError, match="CREWAI_BEDROCK_S3_BUCKET"):
get_uploader("bedrock")