Skip to content

Commit f04773c

Browse files
authored
Merge pull request #69 from JigsawStack/cicd/main-integration
2 parents b6efb2e + c674478 commit f04773c

15 files changed

+349
-81
lines changed

tests/test_audio.py

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,20 @@
1212
logging.basicConfig(level=logging.INFO)
1313
logger = logging.getLogger(__name__)
1414

15-
jigsaw = jigsawstack.JigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY"))
16-
async_jigsaw = jigsawstack.AsyncJigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY"))
15+
jigsaw = jigsawstack.JigsawStack(
16+
api_key=os.getenv("JIGSAWSTACK_API_KEY"),
17+
base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api"
18+
if os.getenv("JIGSAWSTACK_BASE_URL")
19+
else "https://api.jigsawstack.com",
20+
headers={"x-jigsaw-skip-cache": "true"},
21+
)
22+
async_jigsaw = jigsawstack.AsyncJigsawStack(
23+
api_key=os.getenv("JIGSAWSTACK_API_KEY"),
24+
base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api"
25+
if os.getenv("JIGSAWSTACK_BASE_URL")
26+
else "https://api.jigsawstack.com",
27+
headers={"x-jigsaw-skip-cache": "true"},
28+
)
1729

1830
AUDIO_URL = AUDIO_URL_LONG = "https://jigsawstack.com/preview/stt-example.wav"
1931

@@ -119,20 +131,26 @@
119131
class TestAudioSync:
120132
"""Test synchronous audio speech-to-text methods"""
121133

122-
@pytest.mark.parametrize("test_case", TEST_CASES, ids=[tc["name"] for tc in TEST_CASES])
134+
@pytest.mark.parametrize(
135+
"test_case", TEST_CASES, ids=[tc["name"] for tc in TEST_CASES]
136+
)
123137
def test_speech_to_text(self, test_case):
124138
"""Test synchronous speech-to-text with various inputs"""
125139
try:
126140
if test_case.get("blob"):
127141
# Download audio content
128142
blob_content = requests.get(test_case["blob"]).content
129-
result = jigsaw.audio.speech_to_text(blob_content, test_case.get("options", {}))
143+
result = jigsaw.audio.speech_to_text(
144+
blob_content, test_case.get("options", {})
145+
)
130146
else:
131147
# Use params directly
132148
result = jigsaw.audio.speech_to_text(test_case["params"])
133149
# Verify response structure
134150
assert result["success"]
135-
assert result.get("text", None) is not None and isinstance(result["text"], str)
151+
assert result.get("text", None) is not None and isinstance(
152+
result["text"], str
153+
)
136154

137155
# Check for chunks
138156
if result.get("chunks", None):
@@ -154,7 +172,9 @@ def test_speech_to_text_webhook(self, test_case):
154172
if test_case.get("blob"):
155173
# Download audio content
156174
blob_content = requests.get(test_case["blob"]).content
157-
result = jigsaw.audio.speech_to_text(blob_content, test_case.get("options", {}))
175+
result = jigsaw.audio.speech_to_text(
176+
blob_content, test_case.get("options", {})
177+
)
158178
else:
159179
# Use params directly
160180
result = jigsaw.audio.speech_to_text(test_case["params"])
@@ -169,7 +189,9 @@ def test_speech_to_text_webhook(self, test_case):
169189
class TestAudioAsync:
170190
"""Test asynchronous audio speech-to-text methods"""
171191

172-
@pytest.mark.parametrize("test_case", TEST_CASES, ids=[tc["name"] for tc in TEST_CASES])
192+
@pytest.mark.parametrize(
193+
"test_case", TEST_CASES, ids=[tc["name"] for tc in TEST_CASES]
194+
)
173195
@pytest.mark.asyncio
174196
async def test_speech_to_text_async(self, test_case):
175197
"""Test asynchronous speech-to-text with various inputs"""
@@ -186,7 +208,9 @@ async def test_speech_to_text_async(self, test_case):
186208

187209
# Verify response structure
188210
assert result["success"]
189-
assert result.get("text", None) is not None and isinstance(result["text"], str)
211+
assert result.get("text", None) is not None and isinstance(
212+
result["text"], str
213+
)
190214

191215
# Check for chunks
192216
if result.get("chunks", None):
@@ -196,7 +220,9 @@ async def test_speech_to_text_async(self, test_case):
196220
if result.get("speakers", None):
197221
assert isinstance(result["speakers"], list)
198222
except JigsawStackError as e:
199-
pytest.fail(f"Unexpected JigsawStackError in async {test_case['name']}: {e}")
223+
pytest.fail(
224+
f"Unexpected JigsawStackError in async {test_case['name']}: {e}"
225+
)
200226

201227
@pytest.mark.parametrize(
202228
"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):
222248

223249
except JigsawStackError as e:
224250
# Webhook URLs might fail if invalid
225-
print(f"Expected possible error for async webhook test {test_case['name']}: {e}")
251+
print(
252+
f"Expected possible error for async webhook test {test_case['name']}: {e}"
253+
)

tests/test_classification.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,20 @@
1212
logging.basicConfig(level=logging.INFO)
1313
logger = logging.getLogger(__name__)
1414

15-
jigsaw = jigsawstack.JigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY"))
16-
async_jigsaw = jigsawstack.AsyncJigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY"))
15+
jigsaw = jigsawstack.JigsawStack(
16+
api_key=os.getenv("JIGSAWSTACK_API_KEY"),
17+
base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api"
18+
if os.getenv("JIGSAWSTACK_BASE_URL")
19+
else "https://api.jigsawstack.com",
20+
headers={"x-jigsaw-skip-cache": "true"},
21+
)
22+
async_jigsaw = jigsawstack.AsyncJigsawStack(
23+
api_key=os.getenv("JIGSAWSTACK_API_KEY"),
24+
base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api"
25+
if os.getenv("JIGSAWSTACK_BASE_URL")
26+
else "https://api.jigsawstack.com",
27+
headers={"x-jigsaw-skip-cache": "true"},
28+
)
1729

1830
TEST_CASES = [
1931
{

tests/test_deep_research.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,20 @@
1212
logging.basicConfig(level=logging.INFO)
1313
logger = logging.getLogger(__name__)
1414

15-
jigsaw = jigsawstack.JigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY"))
16-
async_jigsaw = jigsawstack.AsyncJigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY"))
15+
jigsaw = jigsawstack.JigsawStack(
16+
api_key=os.getenv("JIGSAWSTACK_API_KEY"),
17+
base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api"
18+
if os.getenv("JIGSAWSTACK_BASE_URL")
19+
else "https://api.jigsawstack.com",
20+
headers={"x-jigsaw-skip-cache": "true"},
21+
)
22+
async_jigsaw = jigsawstack.AsyncJigsawStack(
23+
api_key=os.getenv("JIGSAWSTACK_API_KEY"),
24+
base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api"
25+
if os.getenv("JIGSAWSTACK_BASE_URL")
26+
else "https://api.jigsawstack.com",
27+
headers={"x-jigsaw-skip-cache": "true"},
28+
)
1729

1830
URL = "https://jigsawstack.com"
1931

tests/test_embedding.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,27 @@
1313
logging.basicConfig(level=logging.INFO)
1414
logger = logging.getLogger(__name__)
1515

16-
jigsaw = jigsawstack.JigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY"))
17-
async_jigsaw = jigsawstack.AsyncJigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY"))
18-
19-
SAMPLE_TEXT = (
20-
"The quick brown fox jumps over the lazy dog. This is a sample text for embedding generation."
16+
jigsaw = jigsawstack.JigsawStack(
17+
api_key=os.getenv("JIGSAWSTACK_API_KEY"),
18+
base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api"
19+
if os.getenv("JIGSAWSTACK_BASE_URL")
20+
else "https://api.jigsawstack.com",
21+
headers={"x-jigsaw-skip-cache": "true"},
22+
)
23+
async_jigsaw = jigsawstack.AsyncJigsawStack(
24+
api_key=os.getenv("JIGSAWSTACK_API_KEY"),
25+
base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api"
26+
if os.getenv("JIGSAWSTACK_BASE_URL")
27+
else "https://api.jigsawstack.com",
28+
headers={"x-jigsaw-skip-cache": "true"},
2129
)
30+
31+
SAMPLE_TEXT = "The quick brown fox jumps over the lazy dog. This is a sample text for embedding generation."
2232
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"
2333
SAMPLE_AUDIO_URL = "https://jigsawstack.com/preview/stt-example.wav"
24-
SAMPLE_PDF_URL = "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"
34+
SAMPLE_PDF_URL = (
35+
"https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"
36+
)
2537

2638
# Test cases for Embedding V1
2739
EMBEDDING_V1_TEST_CASES = [

tests/test_file_store.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,20 @@
1313
logging.basicConfig(level=logging.INFO)
1414
logger = logging.getLogger(__name__)
1515

16-
jigsaw = jigsawstack.JigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY"))
17-
async_jigsaw = jigsawstack.AsyncJigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY"))
16+
jigsaw = jigsawstack.JigsawStack(
17+
api_key=os.getenv("JIGSAWSTACK_API_KEY"),
18+
base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api"
19+
if os.getenv("JIGSAWSTACK_BASE_URL")
20+
else "https://api.jigsawstack.com",
21+
headers={"x-jigsaw-skip-cache": "true"},
22+
)
23+
async_jigsaw = jigsawstack.AsyncJigsawStack(
24+
api_key=os.getenv("JIGSAWSTACK_API_KEY"),
25+
base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api"
26+
if os.getenv("JIGSAWSTACK_BASE_URL")
27+
else "https://api.jigsawstack.com",
28+
headers={"x-jigsaw-skip-cache": "true"},
29+
)
1830

1931
TEXT_FILE_CONTENT = b"This is a test file content for JigsawStack storage"
2032
JSON_FILE_CONTENT = b'{"test": "data", "key": "value"}'
@@ -118,7 +130,9 @@ class TestFileStoreAsync:
118130
async def test_file_upload_async(self, test_case):
119131
"""Test asynchronous file upload with various options"""
120132
try:
121-
result = await async_jigsaw.store.upload(test_case["file"], test_case["options"])
133+
result = await async_jigsaw.store.upload(
134+
test_case["file"], test_case["options"]
135+
)
122136

123137
print(f"Async upload test {test_case['name']}: {result}")
124138
assert result.get("key") is not None
@@ -133,7 +147,9 @@ async def test_file_upload_async(self, test_case):
133147
self.uploaded_keys.append(result["key"])
134148

135149
except JigsawStackError as e:
136-
pytest.fail(f"Unexpected JigsawStackError in async {test_case['name']}: {e}")
150+
pytest.fail(
151+
f"Unexpected JigsawStackError in async {test_case['name']}: {e}"
152+
)
137153

138154
@pytest.mark.asyncio
139155
async def test_file_get_async(self):

tests/test_image_generation.py

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,20 @@
1212
logging.basicConfig(level=logging.INFO)
1313
logger = logging.getLogger(__name__)
1414

15-
jigsaw = jigsawstack.JigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY"))
16-
async_jigsaw = jigsawstack.AsyncJigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY"))
15+
jigsaw = jigsawstack.JigsawStack(
16+
api_key=os.getenv("JIGSAWSTACK_API_KEY"),
17+
base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api"
18+
if os.getenv("JIGSAWSTACK_BASE_URL")
19+
else "https://api.jigsawstack.com",
20+
headers={"x-jigsaw-skip-cache": "true"},
21+
)
22+
async_jigsaw = jigsawstack.AsyncJigsawStack(
23+
api_key=os.getenv("JIGSAWSTACK_API_KEY"),
24+
base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api"
25+
if os.getenv("JIGSAWSTACK_BASE_URL")
26+
else "https://api.jigsawstack.com",
27+
headers={"x-jigsaw-skip-cache": "true"},
28+
)
1729

1830
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"
1931
FILE_STORE_KEY = jigsaw.store.upload(
@@ -111,7 +123,9 @@
111123
class TestImageGenerationSync:
112124
"""Test synchronous image generation methods"""
113125

114-
@pytest.mark.parametrize("test_case", TEST_CASES, ids=[tc["name"] for tc in TEST_CASES])
126+
@pytest.mark.parametrize(
127+
"test_case", TEST_CASES, ids=[tc["name"] for tc in TEST_CASES]
128+
)
115129
def test_image_generation(self, test_case):
116130
"""Test synchronous image generation with various parameters"""
117131
try:
@@ -160,15 +174,19 @@ def test_image_to_image_generation(self, test_case):
160174
elif type(result) is bytes:
161175
assert isinstance(result, bytes)
162176
else:
163-
pytest.fail(f"Unexpected result type in {test_case['name']}: {type(result)}")
177+
pytest.fail(
178+
f"Unexpected result type in {test_case['name']}: {type(result)}"
179+
)
164180
except JigsawStackError as e:
165181
pytest.fail(f"Unexpected JigsawStackError in {test_case['name']}: {e}")
166182

167183

168184
class TestImageGenerationAsync:
169185
"""Test asynchronous image generation methods"""
170186

171-
@pytest.mark.parametrize("test_case", TEST_CASES, ids=[tc["name"] for tc in TEST_CASES])
187+
@pytest.mark.parametrize(
188+
"test_case", TEST_CASES, ids=[tc["name"] for tc in TEST_CASES]
189+
)
172190
@pytest.mark.asyncio
173191
async def test_image_generation_async(self, test_case):
174192
"""Test asynchronous image generation with various parameters"""
@@ -195,7 +213,9 @@ async def test_image_generation_async(self, test_case):
195213
assert isinstance(result, bytes)
196214

197215
except JigsawStackError as e:
198-
pytest.fail(f"Unexpected JigsawStackError in async {test_case['name']}: {e}")
216+
pytest.fail(
217+
f"Unexpected JigsawStackError in async {test_case['name']}: {e}"
218+
)
199219

200220
@pytest.mark.parametrize(
201221
"test_case",
@@ -215,7 +235,11 @@ async def test_image_to_image_generation_async(self, test_case):
215235
elif type(result) is bytes:
216236
assert isinstance(result, bytes)
217237
else:
218-
pytest.fail(f"Unexpected result type in {test_case['name']}: {type(result)}")
238+
pytest.fail(
239+
f"Unexpected result type in {test_case['name']}: {type(result)}"
240+
)
219241

220242
except JigsawStackError as e:
221-
pytest.fail(f"Unexpected JigsawStackError in async {test_case['name']}: {e}")
243+
pytest.fail(
244+
f"Unexpected JigsawStackError in async {test_case['name']}: {e}"
245+
)

tests/test_object_detection.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,23 @@
1515
logger = logging.getLogger(__name__)
1616

1717

18-
jigsaw = jigsawstack.JigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY"))
19-
async_jigsaw = jigsawstack.AsyncJigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY"))
20-
21-
IMAGE_URL = (
22-
"https://rogilvkqloanxtvjfrkm.supabase.co/storage/v1/object/public/demo/Collabo%201080x842.jpg"
18+
jigsaw = jigsawstack.JigsawStack(
19+
api_key=os.getenv("JIGSAWSTACK_API_KEY"),
20+
base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api"
21+
if os.getenv("JIGSAWSTACK_BASE_URL")
22+
else "https://api.jigsawstack.com",
23+
headers={"x-jigsaw-skip-cache": "true"},
24+
)
25+
async_jigsaw = jigsawstack.AsyncJigsawStack(
26+
api_key=os.getenv("JIGSAWSTACK_API_KEY"),
27+
base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api"
28+
if os.getenv("JIGSAWSTACK_BASE_URL")
29+
else "https://api.jigsawstack.com",
30+
headers={"x-jigsaw-skip-cache": "true"},
2331
)
2432

33+
IMAGE_URL = "https://rogilvkqloanxtvjfrkm.supabase.co/storage/v1/object/public/demo/Collabo%201080x842.jpg"
34+
2535
TEST_CASES = [
2636
{
2737
"name": "with_url_only",
@@ -104,7 +114,9 @@ def test_object_detection(self, test_case):
104114
if test_case.get("blob"):
105115
# Download blob content
106116
blob_content = requests.get(test_case["blob"]).content
107-
result = jigsaw.vision.object_detection(blob_content, test_case.get("options", {}))
117+
result = jigsaw.vision.object_detection(
118+
blob_content, test_case.get("options", {})
119+
)
108120
else:
109121
# Use params directly
110122
result = jigsaw.vision.object_detection(test_case["params"])

tests/test_prediction.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,20 @@
1313
logging.basicConfig(level=logging.INFO)
1414
logger = logging.getLogger(__name__)
1515

16-
jigsaw = jigsawstack.JigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY"))
17-
async_jigsaw = jigsawstack.AsyncJigsawStack(api_key=os.getenv("JIGSAWSTACK_API_KEY"))
16+
jigsaw = jigsawstack.JigsawStack(
17+
api_key=os.getenv("JIGSAWSTACK_API_KEY"),
18+
base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api"
19+
if os.getenv("JIGSAWSTACK_BASE_URL")
20+
else "https://api.jigsawstack.com",
21+
headers={"x-jigsaw-skip-cache": "true"},
22+
)
23+
async_jigsaw = jigsawstack.AsyncJigsawStack(
24+
api_key=os.getenv("JIGSAWSTACK_API_KEY"),
25+
base_url=os.getenv("JIGSAWSTACK_BASE_URL") + "/api"
26+
if os.getenv("JIGSAWSTACK_BASE_URL")
27+
else "https://api.jigsawstack.com",
28+
headers={"x-jigsaw-skip-cache": "true"},
29+
)
1830

1931

2032
def generate_dates(start_date, num_days):
@@ -47,7 +59,9 @@ def generate_dates(start_date, num_days):
4759
{
4860
"name": "seasonal_pattern",
4961
"params": {
50-
"dataset": [{"date": dates[i], "value": 100 + (50 * (i % 7))} for i in range(21)],
62+
"dataset": [
63+
{"date": dates[i], "value": 100 + (50 * (i % 7))} for i in range(21)
64+
],
5165
"steps": 7,
5266
},
5367
},
@@ -61,7 +75,9 @@ def generate_dates(start_date, num_days):
6175
{
6276
"name": "large_dataset_prediction",
6377
"params": {
64-
"dataset": [{"date": dates[i], "value": 1000 + (i * 20)} for i in range(30)],
78+
"dataset": [
79+
{"date": dates[i], "value": 1000 + (i * 20)} for i in range(30)
80+
],
6581
"steps": 10,
6682
},
6783
},

0 commit comments

Comments
 (0)