From c1984e4406430eda3cfd811d8bf3737d0f89567a Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 18 Jun 2025 10:40:59 +0000 Subject: [PATCH] fix: raise ImportError during PDFKnowledgeSource instantiation when pdfplumber is missing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add __init__ method to PDFKnowledgeSource that checks PDFPLUMBER_AVAILABLE - Update test_optional_dependencies.py to expect ImportError during instantiation - Fixes test_optional_pdf_import_error in test_lite_installation.py - Ensures consistent behavior across all optional dependency implementations Co-Authored-By: João --- src/crewai/knowledge/source/pdf_knowledge_source.py | 9 +++++++++ tests/test_optional_dependencies.py | 4 +--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/crewai/knowledge/source/pdf_knowledge_source.py b/src/crewai/knowledge/source/pdf_knowledge_source.py index a08f16e5d..672c86355 100644 --- a/src/crewai/knowledge/source/pdf_knowledge_source.py +++ b/src/crewai/knowledge/source/pdf_knowledge_source.py @@ -14,6 +14,15 @@ from crewai.knowledge.source.base_file_knowledge_source import BaseFileKnowledge class PDFKnowledgeSource(BaseFileKnowledgeSource): """A knowledge source that stores and queries PDF file content using embeddings.""" + def __init__(self, *args, **kwargs): + """Initialize PDFKnowledgeSource and check for pdfplumber availability.""" + if not PDFPLUMBER_AVAILABLE: + raise ImportError( + "pdfplumber is required for PDF knowledge sources. " + "Please install it with: pip install 'crewai[knowledge]'" + ) + super().__init__(*args, **kwargs) + def load_content(self) -> Dict[Path, str]: """Load and preprocess PDF file content.""" if not PDFPLUMBER_AVAILABLE: diff --git a/tests/test_optional_dependencies.py b/tests/test_optional_dependencies.py index ef913e1d3..aafc1fc64 100644 --- a/tests/test_optional_dependencies.py +++ b/tests/test_optional_dependencies.py @@ -44,10 +44,8 @@ class TestOptionalDependencies: test_file.touch() try: - pdf_source = PDFKnowledgeSource(file_paths=["test.pdf"]) - with pytest.raises(ImportError) as exc_info: - pdf_source._import_pdfplumber() + PDFKnowledgeSource(file_paths=["test.pdf"]) assert "pdfplumber is required" in str(exc_info.value) assert "crewai[knowledge]" in str(exc_info.value)