wavespeed 2.0.0__tar.gz → 2.0.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {wavespeed-2.0.0 → wavespeed-2.0.2}/.github/workflows/python-publish.yml +9 -3
- {wavespeed-2.0.0 → wavespeed-2.0.2}/CHANGELOG.md +8 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/PKG-INFO +9 -2
- {wavespeed-2.0.0 → wavespeed-2.0.2}/README.md +5 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/pyproject.toml +3 -1
- {wavespeed-2.0.0 → wavespeed-2.0.2}/src/wavespeed/_version.py +1 -1
- {wavespeed-2.0.0 → wavespeed-2.0.2}/src/wavespeed/api/client.py +7 -5
- {wavespeed-2.0.0 → wavespeed-2.0.2}/src/wavespeed.egg-info/PKG-INFO +9 -2
- wavespeed-2.0.2/src/wavespeed.egg-info/scm_version.json +8 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/tests/test_api.py +8 -3
- wavespeed-2.0.0/src/wavespeed.egg-info/scm_version.json +0 -8
- {wavespeed-2.0.0 → wavespeed-2.0.2}/.github/workflows/claude.yml +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/.github/workflows/pre-commit.yml +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/.github/workflows/python-packages.yml +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/.github/workflows/tests.yml +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/.gitignore +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/.pre-commit-config.yaml +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/CLAUDE.md +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/LICENSE +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/MANIFEST.in +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/VERSIONING.md +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/assets/wavespeed-logo-dark.svg +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/assets/wavespeed-logo-light.svg +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/pytest.ini +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/setup.cfg +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/src/wavespeed/__init__.py +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/src/wavespeed/_config_module.py +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/src/wavespeed/api/__init__.py +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/src/wavespeed/config.py +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/src/wavespeed.egg-info/SOURCES.txt +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/src/wavespeed.egg-info/dependency_links.txt +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/src/wavespeed.egg-info/not-zip-safe +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/src/wavespeed.egg-info/requires.txt +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/src/wavespeed.egg-info/scm_file_list.json +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/src/wavespeed.egg-info/top_level.txt +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/tests/__init__.py +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/tests/conftest.py +0 -0
- {wavespeed-2.0.0 → wavespeed-2.0.2}/tests/test_config.py +0 -0
|
@@ -8,9 +8,15 @@
|
|
|
8
8
|
|
|
9
9
|
name: python-publish
|
|
10
10
|
|
|
11
|
+
# Triggered by the tag push itself, not by the GitHub Release.
|
|
12
|
+
# python-packages.yml creates that Release using GITHUB_TOKEN, and GitHub's
|
|
13
|
+
# anti-recursion rule means events produced by GITHUB_TOKEN never start another
|
|
14
|
+
# workflow — so `release: published` silently never fired here and the package
|
|
15
|
+
# was never uploaded, while every other check went green.
|
|
11
16
|
on:
|
|
12
|
-
|
|
13
|
-
|
|
17
|
+
push:
|
|
18
|
+
tags:
|
|
19
|
+
- "v[0-9]+*"
|
|
14
20
|
workflow_dispatch:
|
|
15
21
|
|
|
16
22
|
permissions:
|
|
@@ -20,7 +26,7 @@ jobs:
|
|
|
20
26
|
deploy:
|
|
21
27
|
if: >-
|
|
22
28
|
github.repository == 'WaveSpeedAI/wavespeed-python' &&
|
|
23
|
-
((github.event_name == '
|
|
29
|
+
((github.event_name == 'push' && github.ref_type == 'tag' &&
|
|
24
30
|
startsWith(github.ref, 'refs/tags/v')) ||
|
|
25
31
|
(github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main'))
|
|
26
32
|
runs-on: ubuntu-latest
|
|
@@ -4,6 +4,14 @@ All notable changes to this project are documented here.
|
|
|
4
4
|
|
|
5
5
|
Versions are derived from Git tags via `setuptools_scm` — see [VERSIONING.md](VERSIONING.md).
|
|
6
6
|
|
|
7
|
+
## 2.0.1
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- PyPI project links now point at the product rather than only at the repository. `Homepage` is
|
|
12
|
+
`https://wavespeed.ai` (it was the GitHub repo), and `Documentation` and `Changelog` entries were
|
|
13
|
+
added. No code changes — packaging metadata only.
|
|
14
|
+
|
|
7
15
|
## 2.0.0
|
|
8
16
|
|
|
9
17
|
### Removed — BREAKING
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wavespeed
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.2
|
|
4
4
|
Summary: WaveSpeed Python Client — Official Python SDK for the WaveSpeed inference platform
|
|
5
5
|
Author-email: WaveSpeedAI <support@wavespeed.ai>
|
|
6
6
|
License: MIT
|
|
7
|
-
Project-URL: Homepage, https://
|
|
7
|
+
Project-URL: Homepage, https://wavespeed.ai
|
|
8
|
+
Project-URL: Documentation, https://wavespeed.ai/docs/
|
|
8
9
|
Project-URL: Repository, https://github.com/WaveSpeedAI/wavespeed-python
|
|
9
10
|
Project-URL: Issues, https://github.com/WaveSpeedAI/wavespeed-python/issues
|
|
11
|
+
Project-URL: Changelog, https://github.com/WaveSpeedAI/wavespeed-python/blob/main/CHANGELOG.md
|
|
10
12
|
Classifier: Development Status :: 3 - Alpha
|
|
11
13
|
Classifier: Intended Audience :: Developers
|
|
12
14
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -165,3 +167,8 @@ python -m pytest tests/test_api.py::TestClient::test_run_success -v
|
|
|
165
167
|
## License
|
|
166
168
|
|
|
167
169
|
MIT
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
**[WaveSpeed AI](https://wavespeed.ai/)** — AI image & video generation platform.
|
|
174
|
+
Try it in the browser: **[Image generator](https://wavespeed.ai/image-generator)** · **[Video generator](https://wavespeed.ai/video-generator)**
|
|
@@ -138,3 +138,8 @@ python -m pytest tests/test_api.py::TestClient::test_run_success -v
|
|
|
138
138
|
## License
|
|
139
139
|
|
|
140
140
|
MIT
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
**[WaveSpeed AI](https://wavespeed.ai/)** — AI image & video generation platform.
|
|
145
|
+
Try it in the browser: **[Image generator](https://wavespeed.ai/image-generator)** · **[Video generator](https://wavespeed.ai/video-generator)**
|
|
@@ -30,9 +30,11 @@ dependencies = [
|
|
|
30
30
|
]
|
|
31
31
|
|
|
32
32
|
[project.urls]
|
|
33
|
-
Homepage = "https://
|
|
33
|
+
Homepage = "https://wavespeed.ai"
|
|
34
|
+
Documentation = "https://wavespeed.ai/docs/"
|
|
34
35
|
Repository = "https://github.com/WaveSpeedAI/wavespeed-python"
|
|
35
36
|
Issues = "https://github.com/WaveSpeedAI/wavespeed-python/issues"
|
|
37
|
+
Changelog = "https://github.com/WaveSpeedAI/wavespeed-python/blob/main/CHANGELOG.md"
|
|
36
38
|
|
|
37
39
|
[project.optional-dependencies]
|
|
38
40
|
test = ["pytest"]
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# This file is automatically generated by setuptools_scm
|
|
2
|
-
__version__ = "2.0.
|
|
2
|
+
__version__ = "2.0.2"
|
|
@@ -330,7 +330,7 @@ class Client:
|
|
|
330
330
|
if status == "completed":
|
|
331
331
|
return {"outputs": data.get("outputs", [])}
|
|
332
332
|
|
|
333
|
-
if status in ("failed", "cancelled", "timeout"):
|
|
333
|
+
if status in ("failed", "cancelled", "timeout", "deleted"):
|
|
334
334
|
error = data.get("error") or "Unknown error"
|
|
335
335
|
raise RuntimeError(
|
|
336
336
|
f"Prediction {status} (task_id: {request_id}): {error}"
|
|
@@ -371,13 +371,15 @@ class Client:
|
|
|
371
371
|
|
|
372
372
|
return False
|
|
373
373
|
|
|
374
|
-
|
|
375
|
-
def _format_sync_mode_error(data: dict[str, Any]) -> str:
|
|
374
|
+
def _format_sync_mode_error(self, data: dict[str, Any]) -> str:
|
|
376
375
|
"""Build an actionable error for a non-completed sync-mode response."""
|
|
377
376
|
request_id = data.get("id") or "unknown"
|
|
378
377
|
error = data.get("error") or "Unknown error"
|
|
379
|
-
|
|
380
|
-
|
|
378
|
+
result_url = (
|
|
379
|
+
f"{self.base_url}/api/v3/predictions/{request_id}/result"
|
|
380
|
+
if request_id != "unknown"
|
|
381
|
+
else None
|
|
382
|
+
)
|
|
381
383
|
|
|
382
384
|
is_sync_timeout = data.get("code") == 5004 or (
|
|
383
385
|
data.get("status") == "processing" and "Sync mode timed out" in error
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wavespeed
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.2
|
|
4
4
|
Summary: WaveSpeed Python Client — Official Python SDK for the WaveSpeed inference platform
|
|
5
5
|
Author-email: WaveSpeedAI <support@wavespeed.ai>
|
|
6
6
|
License: MIT
|
|
7
|
-
Project-URL: Homepage, https://
|
|
7
|
+
Project-URL: Homepage, https://wavespeed.ai
|
|
8
|
+
Project-URL: Documentation, https://wavespeed.ai/docs/
|
|
8
9
|
Project-URL: Repository, https://github.com/WaveSpeedAI/wavespeed-python
|
|
9
10
|
Project-URL: Issues, https://github.com/WaveSpeedAI/wavespeed-python/issues
|
|
11
|
+
Project-URL: Changelog, https://github.com/WaveSpeedAI/wavespeed-python/blob/main/CHANGELOG.md
|
|
10
12
|
Classifier: Development Status :: 3 - Alpha
|
|
11
13
|
Classifier: Intended Audience :: Developers
|
|
12
14
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -165,3 +167,8 @@ python -m pytest tests/test_api.py::TestClient::test_run_success -v
|
|
|
165
167
|
## License
|
|
166
168
|
|
|
167
169
|
MIT
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
**[WaveSpeed AI](https://wavespeed.ai/)** — AI image & video generation platform.
|
|
174
|
+
Try it in the browser: **[Image generator](https://wavespeed.ai/image-generator)** · **[Video generator](https://wavespeed.ai/video-generator)**
|
|
@@ -253,7 +253,6 @@ class TestClient(unittest.TestCase):
|
|
|
253
253
|
"Sync mode timed out after 90 seconds. The prediction is "
|
|
254
254
|
"still processing asynchronously."
|
|
255
255
|
),
|
|
256
|
-
"urls": {"get": result_url},
|
|
257
256
|
}
|
|
258
257
|
}
|
|
259
258
|
mock_post.return_value = mock_post_response
|
|
@@ -314,7 +313,7 @@ class TestModuleLevelRun(unittest.TestCase):
|
|
|
314
313
|
|
|
315
314
|
|
|
316
315
|
class TestTerminalStatuses(unittest.TestCase):
|
|
317
|
-
"""Tests for
|
|
316
|
+
"""Tests for non-success terminal statuses in the wait loop."""
|
|
318
317
|
|
|
319
318
|
def _run_with_status(self, status):
|
|
320
319
|
with patch("wavespeed.api.client.requests.post") as mock_post, patch(
|
|
@@ -349,6 +348,13 @@ class TestTerminalStatuses(unittest.TestCase):
|
|
|
349
348
|
self.assertIn("Task timeout by server", str(ctx.exception))
|
|
350
349
|
self.assertIn("req-123", str(ctx.exception))
|
|
351
350
|
|
|
351
|
+
def test_deleted_is_terminal(self):
|
|
352
|
+
"""Test that a deleted status raises with the API's error text."""
|
|
353
|
+
with self.assertRaises(RuntimeError) as ctx:
|
|
354
|
+
self._run_with_status("deleted")
|
|
355
|
+
self.assertIn("Task deleted by server", str(ctx.exception))
|
|
356
|
+
self.assertIn("req-123", str(ctx.exception))
|
|
357
|
+
|
|
352
358
|
|
|
353
359
|
class TestRunNoThrow(unittest.TestCase):
|
|
354
360
|
"""Tests for Client.run_no_throw and the module-level run_no_throw."""
|
|
@@ -417,7 +423,6 @@ class TestRunNoThrow(unittest.TestCase):
|
|
|
417
423
|
"Sync mode timed out after 90 seconds. The prediction is "
|
|
418
424
|
"still processing asynchronously."
|
|
419
425
|
),
|
|
420
|
-
"urls": {"get": result_url},
|
|
421
426
|
}
|
|
422
427
|
}
|
|
423
428
|
mock_post.return_value = mock_post_response
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|