diff --git a/tests/test_audio.py b/tests/test_audio.py index 309b191..6a8861d 100644 --- a/tests/test_audio.py +++ b/tests/test_audio.py @@ -12,8 +12,20 @@ logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) -jigsaw = jigsawstack.JigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) -async_jigsaw = jigsawstack.AsyncJigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) +jigsaw = jigsawstack.JigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) +async_jigsaw = jigsawstack.AsyncJigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) AUDIO_URL = AUDIO_URL_LONG = "https://jigsawstack.com/preview/stt-example.wav" @@ -119,20 +131,26 @@ class TestAudioSync: """Test synchronous audio speech-to-text methods""" - @pytest.mark.parametrize("test_case", TEST_CASES, ids=[tc["name"] for tc in TEST_CASES]) + @pytest.mark.parametrize( + "test_case", TEST_CASES, ids=[tc["name"] for tc in TEST_CASES] + ) def test_speech_to_text(self, test_case): """Test synchronous speech-to-text with various inputs""" try: if test_case.get("blob"): # Download audio content blob_content = requests.get(test_case["blob"]).content - result = jigsaw.audio.speech_to_text(blob_content, test_case.get("options", {})) + result = jigsaw.audio.speech_to_text( + blob_content, test_case.get("options", {}) + ) else: # Use params directly result = jigsaw.audio.speech_to_text(test_case["params"]) # Verify response structure assert result["success"] - assert result.get("text", None) is not None and isinstance(result["text"], str) + assert result.get("text", None) is not None and isinstance( + result["text"], str + ) # Check for chunks if result.get("chunks", None): @@ -154,7 +172,9 @@ def test_speech_to_text_webhook(self, test_case): if test_case.get("blob"): # Download audio content blob_content = requests.get(test_case["blob"]).content - result = jigsaw.audio.speech_to_text(blob_content, test_case.get("options", {})) + result = jigsaw.audio.speech_to_text( + blob_content, test_case.get("options", {}) + ) else: # Use params directly result = jigsaw.audio.speech_to_text(test_case["params"]) @@ -169,7 +189,9 @@ def test_speech_to_text_webhook(self, test_case): class TestAudioAsync: """Test asynchronous audio speech-to-text methods""" - @pytest.mark.parametrize("test_case", TEST_CASES, ids=[tc["name"] for tc in TEST_CASES]) + @pytest.mark.parametrize( + "test_case", TEST_CASES, ids=[tc["name"] for tc in TEST_CASES] + ) @pytest.mark.asyncio async def test_speech_to_text_async(self, test_case): """Test asynchronous speech-to-text with various inputs""" @@ -186,7 +208,9 @@ async def test_speech_to_text_async(self, test_case): # Verify response structure assert result["success"] - assert result.get("text", None) is not None and isinstance(result["text"], str) + assert result.get("text", None) is not None and isinstance( + result["text"], str + ) # Check for chunks if result.get("chunks", None): @@ -196,7 +220,9 @@ async def test_speech_to_text_async(self, test_case): if result.get("speakers", None): assert isinstance(result["speakers"], list) except JigsawStackError as e: - pytest.fail(f"Unexpected JigsawStackError in async {test_case['name']}: {e}") + pytest.fail( + f"Unexpected JigsawStackError in async {test_case['name']}: {e}" + ) @pytest.mark.parametrize( "test_case", WEBHOOK_TEST_CASES, ids=[tc["name"] for tc in WEBHOOK_TEST_CASES] @@ -222,4 +248,6 @@ async def test_speech_to_text_webhook_async(self, test_case): except JigsawStackError as e: # Webhook URLs might fail if invalid - print(f"Expected possible error for async webhook test {test_case['name']}: {e}") + print( + f"Expected possible error for async webhook test {test_case['name']}: {e}" + ) diff --git a/tests/test_classification.py b/tests/test_classification.py index dba924a..a74c9a2 100644 --- a/tests/test_classification.py +++ b/tests/test_classification.py @@ -12,8 +12,20 @@ logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) -jigsaw = jigsawstack.JigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) -async_jigsaw = jigsawstack.AsyncJigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) +jigsaw = jigsawstack.JigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) +async_jigsaw = jigsawstack.AsyncJigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) TEST_CASES = [ { diff --git a/tests/test_deep_research.py b/tests/test_deep_research.py index 3d584ab..ec67775 100644 --- a/tests/test_deep_research.py +++ b/tests/test_deep_research.py @@ -12,8 +12,20 @@ logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) -jigsaw = jigsawstack.JigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) -async_jigsaw = jigsawstack.AsyncJigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) +jigsaw = jigsawstack.JigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) +async_jigsaw = jigsawstack.AsyncJigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) URL = "https://jigsawstack.com" diff --git a/tests/test_embedding.py b/tests/test_embedding.py index c2bc59d..60acc60 100644 --- a/tests/test_embedding.py +++ b/tests/test_embedding.py @@ -13,15 +13,27 @@ logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) -jigsaw = jigsawstack.JigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) -async_jigsaw = jigsawstack.AsyncJigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) - -SAMPLE_TEXT = ( - "The quick brown fox jumps over the lazy dog. This is a sample text for embedding generation." +jigsaw = jigsawstack.JigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) +async_jigsaw = jigsawstack.AsyncJigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, ) + +SAMPLE_TEXT = "The quick brown fox jumps over the lazy dog. This is a sample text for embedding generation." SAMPLE_IMAGE_URL = "https://images.unsplash.com/photo-1542931287-023b922fa89b?q=80&w=2574&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" SAMPLE_AUDIO_URL = "https://jigsawstack.com/preview/stt-example.wav" -SAMPLE_PDF_URL = "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf" +SAMPLE_PDF_URL = ( + "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf" +) # Test cases for Embedding V1 EMBEDDING_V1_TEST_CASES = [ diff --git a/tests/test_file_store.py b/tests/test_file_store.py index 97d07dd..b743623 100644 --- a/tests/test_file_store.py +++ b/tests/test_file_store.py @@ -13,8 +13,20 @@ logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) -jigsaw = jigsawstack.JigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) -async_jigsaw = jigsawstack.AsyncJigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) +jigsaw = jigsawstack.JigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) +async_jigsaw = jigsawstack.AsyncJigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) TEXT_FILE_CONTENT = b"This is a test file content for JigsawStack storage" JSON_FILE_CONTENT = b'{"test": "data", "key": "value"}' @@ -118,7 +130,9 @@ class TestFileStoreAsync: async def test_file_upload_async(self, test_case): """Test asynchronous file upload with various options""" try: - result = await async_jigsaw.store.upload(test_case["file"], test_case["options"]) + result = await async_jigsaw.store.upload( + test_case["file"], test_case["options"] + ) print(f"Async upload test {test_case['name']}: {result}") assert result.get("key") is not None @@ -133,7 +147,9 @@ async def test_file_upload_async(self, test_case): self.uploaded_keys.append(result["key"]) except JigsawStackError as e: - pytest.fail(f"Unexpected JigsawStackError in async {test_case['name']}: {e}") + pytest.fail( + f"Unexpected JigsawStackError in async {test_case['name']}: {e}" + ) @pytest.mark.asyncio async def test_file_get_async(self): diff --git a/tests/test_image_generation.py b/tests/test_image_generation.py index 6b982ba..e11bf76 100644 --- a/tests/test_image_generation.py +++ b/tests/test_image_generation.py @@ -12,8 +12,20 @@ logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) -jigsaw = jigsawstack.JigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) -async_jigsaw = jigsawstack.AsyncJigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) +jigsaw = jigsawstack.JigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) +async_jigsaw = jigsawstack.AsyncJigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) IMAGE_URL = "https://images.unsplash.com/photo-1494588024300-e9df7ff98d78?q=80&w=1284&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" FILE_STORE_KEY = jigsaw.store.upload( @@ -111,7 +123,9 @@ class TestImageGenerationSync: """Test synchronous image generation methods""" - @pytest.mark.parametrize("test_case", TEST_CASES, ids=[tc["name"] for tc in TEST_CASES]) + @pytest.mark.parametrize( + "test_case", TEST_CASES, ids=[tc["name"] for tc in TEST_CASES] + ) def test_image_generation(self, test_case): """Test synchronous image generation with various parameters""" try: @@ -160,7 +174,9 @@ def test_image_to_image_generation(self, test_case): elif type(result) is bytes: assert isinstance(result, bytes) else: - pytest.fail(f"Unexpected result type in {test_case['name']}: {type(result)}") + pytest.fail( + f"Unexpected result type in {test_case['name']}: {type(result)}" + ) except JigsawStackError as e: pytest.fail(f"Unexpected JigsawStackError in {test_case['name']}: {e}") @@ -168,7 +184,9 @@ def test_image_to_image_generation(self, test_case): class TestImageGenerationAsync: """Test asynchronous image generation methods""" - @pytest.mark.parametrize("test_case", TEST_CASES, ids=[tc["name"] for tc in TEST_CASES]) + @pytest.mark.parametrize( + "test_case", TEST_CASES, ids=[tc["name"] for tc in TEST_CASES] + ) @pytest.mark.asyncio async def test_image_generation_async(self, test_case): """Test asynchronous image generation with various parameters""" @@ -195,7 +213,9 @@ async def test_image_generation_async(self, test_case): assert isinstance(result, bytes) except JigsawStackError as e: - pytest.fail(f"Unexpected JigsawStackError in async {test_case['name']}: {e}") + pytest.fail( + f"Unexpected JigsawStackError in async {test_case['name']}: {e}" + ) @pytest.mark.parametrize( "test_case", @@ -215,7 +235,11 @@ async def test_image_to_image_generation_async(self, test_case): elif type(result) is bytes: assert isinstance(result, bytes) else: - pytest.fail(f"Unexpected result type in {test_case['name']}: {type(result)}") + pytest.fail( + f"Unexpected result type in {test_case['name']}: {type(result)}" + ) except JigsawStackError as e: - pytest.fail(f"Unexpected JigsawStackError in async {test_case['name']}: {e}") + pytest.fail( + f"Unexpected JigsawStackError in async {test_case['name']}: {e}" + ) diff --git a/tests/test_object_detection.py b/tests/test_object_detection.py index b7286aa..4c846a6 100644 --- a/tests/test_object_detection.py +++ b/tests/test_object_detection.py @@ -15,13 +15,23 @@ logger = logging.getLogger(__name__) -jigsaw = jigsawstack.JigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) -async_jigsaw = jigsawstack.AsyncJigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) - -IMAGE_URL = ( - "https://rogilvkqloanxtvjfrkm.supabase.co/storage/v1/object/public/demo/Collabo%201080x842.jpg" +jigsaw = jigsawstack.JigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) +async_jigsaw = jigsawstack.AsyncJigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, ) +IMAGE_URL = "https://rogilvkqloanxtvjfrkm.supabase.co/storage/v1/object/public/demo/Collabo%201080x842.jpg" + TEST_CASES = [ { "name": "with_url_only", @@ -104,7 +114,9 @@ def test_object_detection(self, test_case): if test_case.get("blob"): # Download blob content blob_content = requests.get(test_case["blob"]).content - result = jigsaw.vision.object_detection(blob_content, test_case.get("options", {})) + result = jigsaw.vision.object_detection( + blob_content, test_case.get("options", {}) + ) else: # Use params directly result = jigsaw.vision.object_detection(test_case["params"]) diff --git a/tests/test_prediction.py b/tests/test_prediction.py index a87ccab..e8489da 100644 --- a/tests/test_prediction.py +++ b/tests/test_prediction.py @@ -13,8 +13,20 @@ logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) -jigsaw = jigsawstack.JigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) -async_jigsaw = jigsawstack.AsyncJigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) +jigsaw = jigsawstack.JigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) +async_jigsaw = jigsawstack.AsyncJigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) def generate_dates(start_date, num_days): @@ -47,7 +59,9 @@ def generate_dates(start_date, num_days): { "name": "seasonal_pattern", "params": { - "dataset": [{"date": dates[i], "value": 100 + (50 * (i % 7))} for i in range(21)], + "dataset": [ + {"date": dates[i], "value": 100 + (50 * (i % 7))} for i in range(21) + ], "steps": 7, }, }, @@ -61,7 +75,9 @@ def generate_dates(start_date, num_days): { "name": "large_dataset_prediction", "params": { - "dataset": [{"date": dates[i], "value": 1000 + (i * 20)} for i in range(30)], + "dataset": [ + {"date": dates[i], "value": 1000 + (i * 20)} for i in range(30) + ], "steps": 10, }, }, diff --git a/tests/test_sentiment.py b/tests/test_sentiment.py index 5bb5914..71dbea7 100644 --- a/tests/test_sentiment.py +++ b/tests/test_sentiment.py @@ -12,8 +12,20 @@ logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) -jigsaw = jigsawstack.JigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) -async_jigsaw = jigsawstack.AsyncJigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) +jigsaw = jigsawstack.JigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) +async_jigsaw = jigsawstack.AsyncJigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) TEST_CASES = [ { @@ -30,7 +42,9 @@ }, { "name": "neutral_sentiment_factual", - "params": {"text": "The meeting is scheduled for 3 PM tomorrow in conference room B."}, + "params": { + "text": "The meeting is scheduled for 3 PM tomorrow in conference room B." + }, }, { "name": "mixed_sentiment_paragraph", @@ -66,7 +80,9 @@ }, { "name": "question_sentiment", - "params": {"text": "Why is this product so amazing? I can't believe how well it works!"}, + "params": { + "text": "Why is this product so amazing? I can't believe how well it works!" + }, }, ] diff --git a/tests/test_sql.py b/tests/test_sql.py index 822ae18..618a52e 100644 --- a/tests/test_sql.py +++ b/tests/test_sql.py @@ -12,8 +12,20 @@ logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) -jigsaw = jigsawstack.JigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) -async_jigsaw = jigsawstack.AsyncJigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) +jigsaw = jigsawstack.JigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) +async_jigsaw = jigsawstack.AsyncJigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) # Sample schemas for different databases MYSQL_SCHEMA = """ diff --git a/tests/test_summary.py b/tests/test_summary.py index ab79ea9..a71692b 100644 --- a/tests/test_summary.py +++ b/tests/test_summary.py @@ -12,8 +12,20 @@ logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) -jigsaw = jigsawstack.JigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) -async_jigsaw = jigsawstack.AsyncJigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) +jigsaw = jigsawstack.JigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) +async_jigsaw = jigsawstack.AsyncJigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) LONG_TEXT = """ Artificial Intelligence (AI) has become one of the most transformative technologies of the 21st century. @@ -147,7 +159,9 @@ def test_summary(self, test_case): else: assert isinstance(result["summary"], str) if "max_characters" in test_case["params"]: - assert len(result["summary"]) <= test_case["params"]["max_characters"] + assert ( + len(result["summary"]) <= test_case["params"]["max_characters"] + ) except JigsawStackError as e: pytest.fail(f"Unexpected JigsawStackError in {test_case['name']}: {e}") @@ -177,7 +191,9 @@ async def test_summary_async(self, test_case): else: assert isinstance(result["summary"], str) if "max_characters" in test_case["params"]: - assert len(result["summary"]) <= test_case["params"]["max_characters"] + assert ( + len(result["summary"]) <= test_case["params"]["max_characters"] + ) except JigsawStackError as e: pytest.fail(f"Unexpected JigsawStackError in {test_case['name']}: {e}") diff --git a/tests/test_translate.py b/tests/test_translate.py index 5b560be..4f63615 100644 --- a/tests/test_translate.py +++ b/tests/test_translate.py @@ -13,8 +13,20 @@ logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) -jigsaw = jigsawstack.JigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) -async_jigsaw = jigsawstack.AsyncJigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) +jigsaw = jigsawstack.JigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) +async_jigsaw = jigsawstack.AsyncJigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) # Sample image URL for translation tests IMAGE_URL = "https://images.unsplash.com/photo-1580679137870-86ef9f9a03d6?q=80&w=2574&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" @@ -144,7 +156,9 @@ def test_translate_text(self, test_case): # Check if the response structure matches the input if isinstance(test_case["params"]["text"], list): assert isinstance(result["translated_text"], list) - assert len(result["translated_text"]) == len(test_case["params"]["text"]) + assert len(result["translated_text"]) == len( + test_case["params"]["text"] + ) else: assert isinstance(result["translated_text"], str) @@ -171,7 +185,9 @@ async def test_translate_text_async(self, test_case): # Check if the response structure matches the input if isinstance(test_case["params"]["text"], list): assert isinstance(result["translated_text"], list) - assert len(result["translated_text"]) == len(test_case["params"]["text"]) + assert len(result["translated_text"]) == len( + test_case["params"]["text"] + ) else: assert isinstance(result["translated_text"], str) @@ -193,7 +209,9 @@ def test_translate_image(self, test_case): if test_case.get("blob"): # Download blob content blob_content = requests.get(test_case["blob"]).content - result = jigsaw.translate.image(blob_content, test_case.get("options", {})) + result = jigsaw.translate.image( + blob_content, test_case.get("options", {}) + ) else: # Use params directly result = jigsaw.translate.image(test_case["params"]) diff --git a/tests/test_validate.py b/tests/test_validate.py index d0d2c43..83b50b6 100644 --- a/tests/test_validate.py +++ b/tests/test_validate.py @@ -13,11 +13,25 @@ logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) -jigsaw = jigsawstack.JigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) -async_jigsaw = jigsawstack.AsyncJigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) +jigsaw = jigsawstack.JigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) +async_jigsaw = jigsawstack.AsyncJigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) # Sample URLs for NSFW testing -SAFE_IMAGE_URL = "https://images.unsplash.com/photo-1506905925346-21bda4d32df4?q=80&w=2070" +SAFE_IMAGE_URL = ( + "https://images.unsplash.com/photo-1506905925346-21bda4d32df4?q=80&w=2070" +) POTENTIALLY_NSFW_URL = "https://images.unsplash.com/photo-1512310604669-443f26c35f52?q=80&w=868&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" SPAM_CHECK_TEST_CASES = [ @@ -73,7 +87,9 @@ }, { "name": "mixed_correct_and_incorrect", - "params": {"text": "The weather is beatiful today, but tommorow might be diferent."}, + "params": { + "text": "The weather is beatiful today, but tommorow might be diferent." + }, }, { "name": "technical_text", @@ -425,7 +441,9 @@ async def test_nsfw_check_blob_async(self, test_case): try: # Download blob content blob_content = requests.get(test_case["blob_url"]).content - result = await async_jigsaw.validate.nsfw(blob_content, test_case["options"]) + result = await async_jigsaw.validate.nsfw( + blob_content, test_case["options"] + ) assert result["success"] assert "nsfw" in result diff --git a/tests/test_vocr.py b/tests/test_vocr.py index d233484..d7193f2 100644 --- a/tests/test_vocr.py +++ b/tests/test_vocr.py @@ -13,8 +13,20 @@ logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) -jigsaw = jigsawstack.JigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) -async_jigsaw = jigsawstack.AsyncJigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) +jigsaw = jigsawstack.JigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) +async_jigsaw = jigsawstack.AsyncJigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) IMAGE_URL = "https://jigsawstack.com/preview/vocr-example.jpg" @@ -69,7 +81,10 @@ }, { "name": "url_with_list_prompt", - "params": {"url": IMAGE_URL, "prompt": ["Extract headers", "Extract body text"]}, + "params": { + "url": IMAGE_URL, + "prompt": ["Extract headers", "Extract body text"], + }, "blob": None, "options": None, }, @@ -79,13 +94,21 @@ PDF_TEST_CASES = [ { "name": "pdf_with_page_range", - "params": {"url": PDF_URL, "page_range": [1, 3], "prompt": "Extract text from these pages"}, + "params": { + "url": PDF_URL, + "page_range": [1, 3], + "prompt": "Extract text from these pages", + }, "blob": None, "options": None, }, { "name": "pdf_single_page", - "params": {"url": PDF_URL, "page_range": [1, 1], "prompt": "What is on the first page?"}, + "params": { + "url": PDF_URL, + "page_range": [1, 1], + "prompt": "What is on the first page?", + }, "blob": None, "options": None, }, @@ -134,7 +157,9 @@ def test_vocr(self, test_case): except JigsawStackError as e: pytest.fail(f"Unexpected JigsawStackError in {test_case['name']}: {e}") - @pytest.mark.parametrize("test_case", pdf_test_cases, ids=[tc["name"] for tc in pdf_test_cases]) + @pytest.mark.parametrize( + "test_case", pdf_test_cases, ids=[tc["name"] for tc in pdf_test_cases] + ) def test_vocr_pdf(self, test_case): """Test synchronous VOCR with PDF inputs""" try: @@ -152,13 +177,15 @@ def test_vocr_pdf(self, test_case): assert "context" in result assert "total_pages" in result - if test_case.get("params", {}).get("page_range") or test_case.get("options", {}).get( - "page_range" - ): + if test_case.get("params", {}).get("page_range") or test_case.get( + "options", {} + ).get("page_range"): assert "page_range" in result assert isinstance(result["page_range"], list) - logger.info(f"Test {test_case['name']}: total_pages={result.get('total_pages')}") + logger.info( + f"Test {test_case['name']}: total_pages={result.get('total_pages')}" + ) except JigsawStackError as e: pytest.fail(f"Unexpected JigsawStackError in {test_case['name']}: {e}") @@ -180,7 +207,9 @@ async def test_vocr_async(self, test_case): if test_case.get("blob"): # Download blob content blob_content = requests.get(test_case["blob"]).content - result = await async_jigsaw.vision.vocr(blob_content, test_case.get("options", {})) + result = await async_jigsaw.vision.vocr( + blob_content, test_case.get("options", {}) + ) else: # Use params directly result = await async_jigsaw.vision.vocr(test_case["params"]) @@ -207,7 +236,9 @@ async def test_vocr_async(self, test_case): except JigsawStackError as e: pytest.fail(f"Unexpected JigsawStackError in {test_case['name']}: {e}") - @pytest.mark.parametrize("test_case", pdf_test_cases, ids=[tc["name"] for tc in pdf_test_cases]) + @pytest.mark.parametrize( + "test_case", pdf_test_cases, ids=[tc["name"] for tc in pdf_test_cases] + ) @pytest.mark.asyncio async def test_vocr_pdf_async(self, test_case): """Test asynchronous VOCR with PDF inputs""" @@ -215,7 +246,9 @@ async def test_vocr_pdf_async(self, test_case): if test_case.get("blob"): # Download blob content blob_content = requests.get(test_case["blob"]).content - result = await async_jigsaw.vision.vocr(blob_content, test_case.get("options", {})) + result = await async_jigsaw.vision.vocr( + blob_content, test_case.get("options", {}) + ) else: # Use params directly result = await async_jigsaw.vision.vocr(test_case["params"]) @@ -229,13 +262,15 @@ async def test_vocr_pdf_async(self, test_case): assert "total_pages" in result # PDF specific # Check if page_range is in response when requested - if test_case.get("params", {}).get("page_range") or test_case.get("options", {}).get( - "page_range" - ): + if test_case.get("params", {}).get("page_range") or test_case.get( + "options", {} + ).get("page_range"): assert "page_range" in result assert isinstance(result["page_range"], list) - logger.info(f"Test {test_case['name']}: total_pages={result.get('total_pages')}") + logger.info( + f"Test {test_case['name']}: total_pages={result.get('total_pages')}" + ) except JigsawStackError as e: pytest.fail(f"Unexpected JigsawStackError in {test_case['name']}: {e}") diff --git a/tests/test_web.py b/tests/test_web.py index c22ccd7..fad3b83 100644 --- a/tests/test_web.py +++ b/tests/test_web.py @@ -10,8 +10,26 @@ logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) -jigsaw = jigsawstack.JigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) -async_jigsaw = jigsawstack.AsyncJigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY")) +# const client = JigsawStack({ +# apiKey, +# baseURL: process.env.JIGSAWSTACK_BASE_URL ? `${process.env.JIGSAWSTACK_BASE_URL}/api` : "https://api.jigsawstack.com", +# headers: { "x-jigsaw-skip-cache": "true" }, +# }); + +jigsaw = jigsawstack.JigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) +async_jigsaw = jigsawstack.AsyncJigsawStack( + api_key=os.getenv("JIGSAWSTACK_API_KEY"), + base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api" + if os.getenv("JIGSAWSTACK_BASE_URL") + else "https://api.jigsawstack.com", + headers={"x-jigsaw-skip-cache": "true"}, +) URL = "https://jigsawstack.com" @@ -143,6 +161,7 @@ }, ] + class TestHTMLToAnySync: """Test synchronous HTML to Any methods""" @@ -227,8 +246,10 @@ def test_search_suggestions(self, test_case): except JigsawStackError as e: pytest.fail(f"Unexpected JigsawStackError in {test_case['name']}: {e}") + # Async Test Classes + class TestHTMLToAnyAsync: """Test asynchronous HTML to Any methods"""