wavespeed 2.0.2__tar.gz → 2.0.3__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.
Files changed (39) hide show
  1. wavespeed-2.0.3/.github/dependabot.yml +11 -0
  2. {wavespeed-2.0.2 → wavespeed-2.0.3}/.github/workflows/pre-commit.yml +1 -0
  3. {wavespeed-2.0.2 → wavespeed-2.0.3}/PKG-INFO +1 -1
  4. {wavespeed-2.0.2 → wavespeed-2.0.3}/src/wavespeed/_version.py +1 -1
  5. {wavespeed-2.0.2 → wavespeed-2.0.3}/src/wavespeed/api/client.py +6 -2
  6. {wavespeed-2.0.2 → wavespeed-2.0.3}/src/wavespeed.egg-info/PKG-INFO +1 -1
  7. {wavespeed-2.0.2 → wavespeed-2.0.3}/src/wavespeed.egg-info/SOURCES.txt +1 -0
  8. {wavespeed-2.0.2 → wavespeed-2.0.3}/src/wavespeed.egg-info/scm_file_list.json +1 -0
  9. wavespeed-2.0.3/src/wavespeed.egg-info/scm_version.json +8 -0
  10. {wavespeed-2.0.2 → wavespeed-2.0.3}/tests/test_api.py +16 -0
  11. wavespeed-2.0.2/src/wavespeed.egg-info/scm_version.json +0 -8
  12. {wavespeed-2.0.2 → wavespeed-2.0.3}/.github/workflows/claude.yml +0 -0
  13. {wavespeed-2.0.2 → wavespeed-2.0.3}/.github/workflows/python-packages.yml +0 -0
  14. {wavespeed-2.0.2 → wavespeed-2.0.3}/.github/workflows/python-publish.yml +0 -0
  15. {wavespeed-2.0.2 → wavespeed-2.0.3}/.github/workflows/tests.yml +0 -0
  16. {wavespeed-2.0.2 → wavespeed-2.0.3}/.gitignore +0 -0
  17. {wavespeed-2.0.2 → wavespeed-2.0.3}/.pre-commit-config.yaml +0 -0
  18. {wavespeed-2.0.2 → wavespeed-2.0.3}/CHANGELOG.md +0 -0
  19. {wavespeed-2.0.2 → wavespeed-2.0.3}/CLAUDE.md +0 -0
  20. {wavespeed-2.0.2 → wavespeed-2.0.3}/LICENSE +0 -0
  21. {wavespeed-2.0.2 → wavespeed-2.0.3}/MANIFEST.in +0 -0
  22. {wavespeed-2.0.2 → wavespeed-2.0.3}/README.md +0 -0
  23. {wavespeed-2.0.2 → wavespeed-2.0.3}/VERSIONING.md +0 -0
  24. {wavespeed-2.0.2 → wavespeed-2.0.3}/assets/wavespeed-logo-dark.svg +0 -0
  25. {wavespeed-2.0.2 → wavespeed-2.0.3}/assets/wavespeed-logo-light.svg +0 -0
  26. {wavespeed-2.0.2 → wavespeed-2.0.3}/pyproject.toml +0 -0
  27. {wavespeed-2.0.2 → wavespeed-2.0.3}/pytest.ini +0 -0
  28. {wavespeed-2.0.2 → wavespeed-2.0.3}/setup.cfg +0 -0
  29. {wavespeed-2.0.2 → wavespeed-2.0.3}/src/wavespeed/__init__.py +0 -0
  30. {wavespeed-2.0.2 → wavespeed-2.0.3}/src/wavespeed/_config_module.py +0 -0
  31. {wavespeed-2.0.2 → wavespeed-2.0.3}/src/wavespeed/api/__init__.py +0 -0
  32. {wavespeed-2.0.2 → wavespeed-2.0.3}/src/wavespeed/config.py +0 -0
  33. {wavespeed-2.0.2 → wavespeed-2.0.3}/src/wavespeed.egg-info/dependency_links.txt +0 -0
  34. {wavespeed-2.0.2 → wavespeed-2.0.3}/src/wavespeed.egg-info/not-zip-safe +0 -0
  35. {wavespeed-2.0.2 → wavespeed-2.0.3}/src/wavespeed.egg-info/requires.txt +0 -0
  36. {wavespeed-2.0.2 → wavespeed-2.0.3}/src/wavespeed.egg-info/top_level.txt +0 -0
  37. {wavespeed-2.0.2 → wavespeed-2.0.3}/tests/__init__.py +0 -0
  38. {wavespeed-2.0.2 → wavespeed-2.0.3}/tests/conftest.py +0 -0
  39. {wavespeed-2.0.2 → wavespeed-2.0.3}/tests/test_config.py +0 -0
@@ -0,0 +1,11 @@
1
+ version: 2
2
+ updates:
3
+ # Actions are pinned to commit SHAs; this keeps the pins moving.
4
+ - package-ecosystem: github-actions
5
+ directory: /
6
+ schedule:
7
+ interval: weekly
8
+ # One pull request per run instead of one per action.
9
+ groups:
10
+ actions:
11
+ patterns: ['*']
@@ -24,6 +24,7 @@ jobs:
24
24
  steps:
25
25
  - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
26
26
  with:
27
+ persist-credentials: false
27
28
  path: "."
28
29
  - name: Set up Python
29
30
  uses: actions/setup-python@3542bca2639a428e1796aaa6a2ffef0c0f575566 # v3
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wavespeed
3
- Version: 2.0.2
3
+ Version: 2.0.3
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
@@ -1,2 +1,2 @@
1
1
  # This file is automatically generated by setuptools_scm
2
- __version__ = "2.0.2"
2
+ __version__ = "2.0.3"
@@ -587,7 +587,8 @@ class Client:
587
587
  URL of the uploaded file.
588
588
 
589
589
  Raises:
590
- ValueError: If API key is not configured.
590
+ ValueError: If API key is not configured, or a non-seekable
591
+ stream exceeds the 200 MB upload limit.
591
592
  FileNotFoundError: If file path does not exist.
592
593
  RuntimeError: If upload fails.
593
594
 
@@ -627,7 +628,10 @@ class Client:
627
628
  size = stream.tell() - start
628
629
  stream.seek(start)
629
630
  except (AttributeError, OSError, io.UnsupportedOperation):
630
- data = stream.read(200 * 1024 * 1024 + 1)
631
+ max_size = 200 * 1024 * 1024
632
+ data = stream.read(max_size + 1)
633
+ if len(data) > max_size:
634
+ raise ValueError("File size exceeds the 200 MB limit.")
631
635
  stream = io.BytesIO(data)
632
636
  size = len(data)
633
637
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wavespeed
3
- Version: 2.0.2
3
+ Version: 2.0.3
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
@@ -9,6 +9,7 @@ VERSIONING.md
9
9
  pyproject.toml
10
10
  pytest.ini
11
11
  setup.cfg
12
+ .github/dependabot.yml
12
13
  .github/workflows/claude.yml
13
14
  .github/workflows/pre-commit.yml
14
15
  .github/workflows/python-packages.yml
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "files": [
3
+ ".github/dependabot.yml",
3
4
  ".github/workflows/claude.yml",
4
5
  ".github/workflows/pre-commit.yml",
5
6
  ".github/workflows/python-packages.yml",
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "2.0.3",
3
+ "distance": 0,
4
+ "node": "g3e926667ae3ef93fc11dc277b6f09b081750ad7d",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-09-21"
8
+ }
@@ -582,6 +582,22 @@ class TestUpload(unittest.TestCase):
582
582
  with self.assertRaises(FileNotFoundError):
583
583
  client.upload("/nonexistent/path/to/file.png")
584
584
 
585
+ @patch("wavespeed.api.client.requests.post")
586
+ def test_upload_oversize_stream_raises(self, mock_post):
587
+ """A non-seekable stream over the limit fails before any request."""
588
+
589
+ class Pipe:
590
+ name = "clip.mp4"
591
+
592
+ def read(self, n):
593
+ return bytes(n)
594
+
595
+ client = Client(api_key="test-key")
596
+ with self.assertRaises(ValueError) as ctx:
597
+ client.upload(Pipe())
598
+ self.assertIn("200 MB", str(ctx.exception))
599
+ mock_post.assert_not_called()
600
+
585
601
  def test_upload_raises_without_api_key(self):
586
602
  """Test that upload raises ValueError without API key."""
587
603
  client = Client()
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "2.0.2",
3
- "distance": 0,
4
- "node": "gac985323c284a8d135a6396b7dc2ac6f9f5e7fd4",
5
- "dirty": false,
6
- "branch": "HEAD",
7
- "node_date": "2026-08-26"
8
- }
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