From d5ba5bed26fba364e010dc3e8009ad808fb10128 Mon Sep 17 00:00:00 2001 From: Adir Amsalem Date: Tue, 21 Oct 2025 17:14:28 +0300 Subject: [PATCH 1/2] chore: `decart` instead of `decart-sdk` --- README.md | 14 +++++----- {decart_sdk => decart}/__init__.py | 0 {decart_sdk => decart}/client.py | 0 {decart_sdk => decart}/errors.py | 0 {decart_sdk => decart}/models.py | 0 {decart_sdk => decart}/process/__init__.py | 0 {decart_sdk => decart}/process/request.py | 0 {decart_sdk => decart}/py.typed | 0 {decart_sdk => decart}/realtime/__init__.py | 0 {decart_sdk => decart}/realtime/client.py | 0 {decart_sdk => decart}/realtime/messages.py | 0 {decart_sdk => decart}/realtime/types.py | 0 .../realtime/webrtc_connection.py | 0 .../realtime/webrtc_manager.py | 0 {decart_sdk => decart}/types.py | 0 examples/README.md | 4 +-- examples/process_image.py | 2 +- examples/process_url.py | 2 +- examples/process_video.py | 2 +- examples/realtime_file.py | 14 +++++----- examples/realtime_synthetic.py | 14 +++++----- pyproject.toml | 8 +++--- tests/test_client.py | 2 +- tests/test_models.py | 2 +- tests/test_process.py | 2 +- tests/test_realtime_unit.py | 26 +++++++++---------- uv.lock | 2 +- 27 files changed, 47 insertions(+), 47 deletions(-) rename {decart_sdk => decart}/__init__.py (100%) rename {decart_sdk => decart}/client.py (100%) rename {decart_sdk => decart}/errors.py (100%) rename {decart_sdk => decart}/models.py (100%) rename {decart_sdk => decart}/process/__init__.py (100%) rename {decart_sdk => decart}/process/request.py (100%) rename {decart_sdk => decart}/py.typed (100%) rename {decart_sdk => decart}/realtime/__init__.py (100%) rename {decart_sdk => decart}/realtime/client.py (100%) rename {decart_sdk => decart}/realtime/messages.py (100%) rename {decart_sdk => decart}/realtime/types.py (100%) rename {decart_sdk => decart}/realtime/webrtc_connection.py (100%) rename {decart_sdk => decart}/realtime/webrtc_manager.py (100%) rename {decart_sdk => decart}/types.py (100%) diff --git a/README.md b/README.md index 414721e..a3c5cd5 100644 --- a/README.md +++ b/README.md @@ -7,13 +7,13 @@ A Python SDK for Decart's models. ### Using UV ```bash -uv pip install decart-sdk +uv pip install decart ``` ### Using pip ```bash -pip install decart-sdk +pip install decart ``` ## Documentation @@ -28,7 +28,7 @@ For complete documentation, guides, and examples, visit: ```python import asyncio import os -from decart_sdk import DecartClient, models +from decart import DecartClient, models async def main(): async with DecartClient(api_key=os.getenv("DECART_API_KEY")) as client: @@ -82,13 +82,13 @@ uv sync --all-extras uv run pytest # Run linting -uv run ruff check decart_sdk/ +uv run ruff check decart/ # Format code -uv run black decart_sdk/ tests/ examples/ +uv run black decart/ tests/ examples/ # Type check -uv run mypy decart_sdk/ +uv run mypy decart/ ``` ### Common Commands @@ -98,7 +98,7 @@ uv run mypy decart_sdk/ uv sync --all-extras # Run tests with coverage -uv run pytest --cov=decart_sdk --cov-report=html +uv run pytest --cov=decart --cov-report=html # Run examples uv run python examples/process_video.py diff --git a/decart_sdk/__init__.py b/decart/__init__.py similarity index 100% rename from decart_sdk/__init__.py rename to decart/__init__.py diff --git a/decart_sdk/client.py b/decart/client.py similarity index 100% rename from decart_sdk/client.py rename to decart/client.py diff --git a/decart_sdk/errors.py b/decart/errors.py similarity index 100% rename from decart_sdk/errors.py rename to decart/errors.py diff --git a/decart_sdk/models.py b/decart/models.py similarity index 100% rename from decart_sdk/models.py rename to decart/models.py diff --git a/decart_sdk/process/__init__.py b/decart/process/__init__.py similarity index 100% rename from decart_sdk/process/__init__.py rename to decart/process/__init__.py diff --git a/decart_sdk/process/request.py b/decart/process/request.py similarity index 100% rename from decart_sdk/process/request.py rename to decart/process/request.py diff --git a/decart_sdk/py.typed b/decart/py.typed similarity index 100% rename from decart_sdk/py.typed rename to decart/py.typed diff --git a/decart_sdk/realtime/__init__.py b/decart/realtime/__init__.py similarity index 100% rename from decart_sdk/realtime/__init__.py rename to decart/realtime/__init__.py diff --git a/decart_sdk/realtime/client.py b/decart/realtime/client.py similarity index 100% rename from decart_sdk/realtime/client.py rename to decart/realtime/client.py diff --git a/decart_sdk/realtime/messages.py b/decart/realtime/messages.py similarity index 100% rename from decart_sdk/realtime/messages.py rename to decart/realtime/messages.py diff --git a/decart_sdk/realtime/types.py b/decart/realtime/types.py similarity index 100% rename from decart_sdk/realtime/types.py rename to decart/realtime/types.py diff --git a/decart_sdk/realtime/webrtc_connection.py b/decart/realtime/webrtc_connection.py similarity index 100% rename from decart_sdk/realtime/webrtc_connection.py rename to decart/realtime/webrtc_connection.py diff --git a/decart_sdk/realtime/webrtc_manager.py b/decart/realtime/webrtc_manager.py similarity index 100% rename from decart_sdk/realtime/webrtc_manager.py rename to decart/realtime/webrtc_manager.py diff --git a/decart_sdk/types.py b/decart/types.py similarity index 100% rename from decart_sdk/types.py rename to decart/types.py diff --git a/examples/README.md b/examples/README.md index 0c74ff1..4733171 100644 --- a/examples/README.md +++ b/examples/README.md @@ -7,7 +7,7 @@ This directory contains example scripts demonstrating how to use the Decart Pyth 1. Install the SDK: ```bash -pip install decart-sdk +pip install decart ``` 2. Set your API key: @@ -29,7 +29,7 @@ export DECART_API_KEY="your-api-key-here" First, install the realtime dependencies: ```bash -pip install decart-sdk[realtime] +pip install decart[realtime] ``` - **`realtime_synthetic.py`** - Test realtime API with synthetic colored frames diff --git a/examples/process_image.py b/examples/process_image.py index 66030db..f1096a6 100644 --- a/examples/process_image.py +++ b/examples/process_image.py @@ -1,6 +1,6 @@ import asyncio import os -from decart_sdk import DecartClient, models +from decart import DecartClient, models async def main() -> None: diff --git a/examples/process_url.py b/examples/process_url.py index 8805d8e..521a50a 100644 --- a/examples/process_url.py +++ b/examples/process_url.py @@ -1,6 +1,6 @@ import asyncio import os -from decart_sdk import DecartClient, models +from decart import DecartClient, models async def main() -> None: diff --git a/examples/process_video.py b/examples/process_video.py index fbc1c42..fbe9670 100644 --- a/examples/process_video.py +++ b/examples/process_video.py @@ -1,6 +1,6 @@ import asyncio import os -from decart_sdk import DecartClient, models +from decart import DecartClient, models async def main() -> None: diff --git a/examples/realtime_file.py b/examples/realtime_file.py index e6f6886..5bc929b 100644 --- a/examples/realtime_file.py +++ b/examples/realtime_file.py @@ -1,13 +1,13 @@ import asyncio import os from pathlib import Path -from decart_sdk import DecartClient, models +from decart import DecartClient, models try: from aiortc.contrib.media import MediaPlayer, MediaRecorder except ImportError: print("aiortc is required for this example.") - print("Install with: pip install decart-sdk[realtime]") + print("Install with: pip install decart[realtime]") exit(1) @@ -38,10 +38,10 @@ async def main(): return try: - from decart_sdk.realtime.client import RealtimeClient + from decart.realtime.client import RealtimeClient except ImportError: print("Error: Realtime API not available") - print("Install with: pip install decart-sdk[realtime]") + print("Install with: pip install decart[realtime]") return print("Creating Decart client...") @@ -74,9 +74,9 @@ def on_error(error): print("\nConnecting to Realtime API...") try: - from decart_sdk.realtime.client import RealtimeClient - from decart_sdk.realtime.types import RealtimeConnectOptions - from decart_sdk.types import ModelState, Prompt + from decart.realtime.client import RealtimeClient + from decart.realtime.types import RealtimeConnectOptions + from decart.types import ModelState, Prompt realtime_client = await RealtimeClient.connect( base_url=client.base_url, diff --git a/examples/realtime_synthetic.py b/examples/realtime_synthetic.py index 331037b..e12c159 100644 --- a/examples/realtime_synthetic.py +++ b/examples/realtime_synthetic.py @@ -3,7 +3,7 @@ import os import numpy as np from pathlib import Path -from decart_sdk import DecartClient, models +from decart import DecartClient, models logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s" @@ -15,7 +15,7 @@ from av import VideoFrame except ImportError: print("aiortc is required for this example.") - print("Install with: pip install decart-sdk[realtime]") + print("Install with: pip install decart[realtime]") exit(1) @@ -62,10 +62,10 @@ async def main(): return try: - from decart_sdk.realtime.client import RealtimeClient + from decart.realtime.client import RealtimeClient except ImportError: print("Error: Realtime API not available") - print("Install with: pip install decart-sdk[realtime]") + print("Install with: pip install decart[realtime]") return print("Creating Decart client...") @@ -100,9 +100,9 @@ def on_error(error): print("\nConnecting to Realtime API...") try: - from decart_sdk.realtime.client import RealtimeClient - from decart_sdk.realtime.types import RealtimeConnectOptions - from decart_sdk.types import ModelState, Prompt + from decart.realtime.client import RealtimeClient + from decart.realtime.types import RealtimeConnectOptions + from decart.types import ModelState, Prompt realtime_client = await RealtimeClient.connect( base_url=client.base_url, diff --git a/pyproject.toml b/pyproject.toml index 4970732..89d8062 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,8 +9,8 @@ allow-direct-references = true core-metadata-version = "2.1" [project] -name = "decart-sdk" -version = "0.0.1" +name = "decart" +version = "0.0.3" description = "Decart's Python SDK" readme = "README.md" requires-python = ">=3.9" @@ -59,11 +59,11 @@ Repository = "https://github.com/decartai/decart-python" Issues = "https://github.com/decartai/decart-python/issues" [tool.hatch.build.targets.wheel] -packages = ["decart_sdk"] +packages = ["decart"] core-metadata-version = "2.1" [tool.hatch.build.targets.wheel.force-include] -"decart_sdk/py.typed" = "decart_sdk/py.typed" +"decart/py.typed" = "decart/py.typed" [tool.pytest.ini_options] asyncio_mode = "auto" diff --git a/tests/test_client.py b/tests/test_client.py index c48539c..5da5da8 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -1,5 +1,5 @@ import pytest -from decart_sdk import DecartClient, InvalidAPIKeyError, InvalidBaseURLError +from decart import DecartClient, InvalidAPIKeyError, InvalidBaseURLError def test_create_client_success() -> None: diff --git a/tests/test_models.py b/tests/test_models.py index b020ba5..80a00fe 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -1,5 +1,5 @@ import pytest -from decart_sdk import models, DecartSDKError +from decart import models, DecartSDKError def test_realtime_models() -> None: diff --git a/tests/test_process.py b/tests/test_process.py index 1a0866a..24eac2c 100644 --- a/tests/test_process.py +++ b/tests/test_process.py @@ -1,7 +1,7 @@ import pytest import asyncio from unittest.mock import AsyncMock, patch, MagicMock -from decart_sdk import DecartClient, models, DecartSDKError +from decart import DecartClient, models, DecartSDKError @pytest.mark.asyncio diff --git a/tests/test_realtime_unit.py b/tests/test_realtime_unit.py index 60980b2..73efdc7 100644 --- a/tests/test_realtime_unit.py +++ b/tests/test_realtime_unit.py @@ -1,9 +1,9 @@ import pytest from unittest.mock import AsyncMock, MagicMock, patch -from decart_sdk import DecartClient, models +from decart import DecartClient, models try: - from decart_sdk.realtime.client import RealtimeClient + from decart.realtime.client import RealtimeClient REALTIME_AVAILABLE = True except ImportError: @@ -11,7 +11,7 @@ pytestmark = pytest.mark.skipif( not REALTIME_AVAILABLE, - reason="Realtime API not available - install with: pip install decart-sdk[realtime]", + reason="Realtime API not available - install with: pip install decart[realtime]", ) @@ -38,7 +38,7 @@ async def test_realtime_client_creation_with_mock(): """Test client creation with mocked WebRTC""" client = DecartClient(api_key="test-key") - with patch("decart_sdk.realtime.client.WebRTCManager") as mock_manager_class: + with patch("decart.realtime.client.WebRTCManager") as mock_manager_class: mock_manager = AsyncMock() mock_manager.connect = AsyncMock(return_value=True) mock_manager.is_connected = MagicMock(return_value=True) @@ -47,8 +47,8 @@ async def test_realtime_client_creation_with_mock(): mock_track = MagicMock() - from decart_sdk.realtime.types import RealtimeConnectOptions - from decart_sdk.types import ModelState, Prompt + from decart.realtime.types import RealtimeConnectOptions + from decart.types import ModelState, Prompt realtime_client = await RealtimeClient.connect( base_url=client.base_url, @@ -71,7 +71,7 @@ async def test_realtime_set_prompt_with_mock(): """Test set_prompt with mocked WebRTC""" client = DecartClient(api_key="test-key") - with patch("decart_sdk.realtime.client.WebRTCManager") as mock_manager_class: + with patch("decart.realtime.client.WebRTCManager") as mock_manager_class: mock_manager = AsyncMock() mock_manager.connect = AsyncMock(return_value=True) mock_manager.send_message = AsyncMock() @@ -79,7 +79,7 @@ async def test_realtime_set_prompt_with_mock(): mock_track = MagicMock() - from decart_sdk.realtime.types import RealtimeConnectOptions + from decart.realtime.types import RealtimeConnectOptions realtime_client = await RealtimeClient.connect( base_url=client.base_url, @@ -104,7 +104,7 @@ async def test_realtime_set_mirror_with_mock(): """Test set_mirror with mocked WebRTC""" client = DecartClient(api_key="test-key") - with patch("decart_sdk.realtime.client.WebRTCManager") as mock_manager_class: + with patch("decart.realtime.client.WebRTCManager") as mock_manager_class: mock_manager = AsyncMock() mock_manager.connect = AsyncMock(return_value=True) mock_manager.send_message = AsyncMock() @@ -112,7 +112,7 @@ async def test_realtime_set_mirror_with_mock(): mock_track = MagicMock() - from decart_sdk.realtime.types import RealtimeConnectOptions + from decart.realtime.types import RealtimeConnectOptions realtime_client = await RealtimeClient.connect( base_url=client.base_url, @@ -137,14 +137,14 @@ async def test_realtime_events(): """Test event handling""" client = DecartClient(api_key="test-key") - with patch("decart_sdk.realtime.client.WebRTCManager") as mock_manager_class: + with patch("decart.realtime.client.WebRTCManager") as mock_manager_class: mock_manager = AsyncMock() mock_manager.connect = AsyncMock(return_value=True) mock_manager_class.return_value = mock_manager mock_track = MagicMock() - from decart_sdk.realtime.types import RealtimeConnectOptions + from decart.realtime.types import RealtimeConnectOptions realtime_client = await RealtimeClient.connect( base_url=client.base_url, @@ -171,7 +171,7 @@ def on_error(error): realtime_client._emit_connection_change("connected") assert connection_states == ["connected"] - from decart_sdk.errors import DecartSDKError + from decart.errors import DecartSDKError test_error = DecartSDKError("Test error") realtime_client._emit_error(test_error) diff --git a/uv.lock b/uv.lock index b222ba8..694ba22 100644 --- a/uv.lock +++ b/uv.lock @@ -849,7 +849,7 @@ wheels = [ ] [[package]] -name = "decart-sdk" +name = "decart" version = "0.0.1" source = { editable = "." } dependencies = [ From 8bfce8a77db52f3874db913eda9214da415e6527 Mon Sep 17 00:00:00 2001 From: Adir Amsalem Date: Tue, 21 Oct 2025 17:19:28 +0300 Subject: [PATCH 2/2] fix ci workflow --- .github/workflows/ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b920fb8..110e275 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,13 +26,13 @@ jobs: run: uv sync --all-extras - name: Check formatting with Black - run: uv run black --check decart_sdk/ tests/ examples/ + run: uv run black --check decart/ tests/ examples/ - name: Lint with Ruff - run: uv run ruff check decart_sdk/ tests/ examples/ + run: uv run ruff check decart/ tests/ examples/ - name: Type check with MyPy - run: uv run mypy decart_sdk/ + run: uv run mypy decart/ continue-on-error: true # Don't fail on type errors yet test: @@ -58,7 +58,7 @@ jobs: run: uv sync --all-extras - name: Run tests - run: uv run pytest tests/ -v --cov=decart_sdk --cov-report=xml --cov-report=term + run: uv run pytest tests/ -v --cov=decart --cov-report=xml --cov-report=term - name: Upload coverage to Codecov uses: codecov/codecov-action@v4