diff --git a/.github/scripts/check_installed_distribution.py b/.github/scripts/check_installed_distribution.py index e16697b..fb9a2fc 100644 --- a/.github/scripts/check_installed_distribution.py +++ b/.github/scripts/check_installed_distribution.py @@ -12,7 +12,7 @@ from typesafe_sdk import AsyncTypeSafeClient, TypeSafeClient async def main() -> None: """Check the installed version and initialize both clients.""" - if version("typesafe-sdk") != sys.argv[1]: + if version("aphrody-typesafe-sdk") != sys.argv[1]: raise RuntimeError("Installed distribution version does not match the release") if typesafe_sdk.__version__ != sys.argv[1]: raise RuntimeError("Exported SDK version does not match the release") diff --git a/README.md b/README.md index 33231d7..2e96117 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,10 @@ Python SDK for [TypeSafe AI](https://typesafe.ai). Install the SDK: ``` -uv add typesafe-sdk +uv add aphrody-typesafe-sdk ``` -Add the `http2` extra (`typesafe-sdk[http2]`) to enable [HTTP/2 support](https://docs.typesafe.ai/sdk/python/usage/#http2). +Add the `http2` extra (`aphrody-typesafe-sdk[http2]`) to enable HTTP/2 support. Set `TYPESAFE_API_KEY` in your environment, then instantiate and use the client: diff --git a/pyproject.toml b/pyproject.toml index 6063588..0c287ce 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] -name = "typesafe-sdk" -version = "0.7.4" +name = "aphrody-typesafe-sdk" +version = "0.7.5" description = "Python SDK for TypeSafe AI API." readme = "README.md" license = "MIT" @@ -49,16 +49,19 @@ http2 = [ ] [project.urls] -Homepage = "https://typesafe.ai" -Documentation = "https://docs.typesafe.ai/sdk/python/" -Changelog = "https://docs.typesafe.ai/sdk/python/changelog/" -Repository = "https://github.com/typesafe-ai/typesafe-sdk-python" -Issues = "https://github.com/typesafe-ai/typesafe-sdk-python/issues" +Homepage = "https://github.com/aphrody-labs/typesafe-sdk-python" +Documentation = "https://github.com/aphrody-labs/typesafe-sdk-python#readme" +Changelog = "https://github.com/aphrody-labs/typesafe-sdk-python/blob/main/docs/changelog.md" +Repository = "https://github.com/aphrody-labs/typesafe-sdk-python" +Issues = "https://github.com/aphrody-labs/typesafe-sdk-python/issues" [build-system] requires = ["uv_build>=0.12.5,<0.13"] build-backend = "uv_build" +[tool.uv.build-backend] +module-name = "typesafe_sdk" + [dependency-groups] dev = [ "gitpython>=3.1.62", diff --git a/src/typesafe_sdk/_version.py b/src/typesafe_sdk/_version.py index 9208ac7..f3d8217 100644 --- a/src/typesafe_sdk/_version.py +++ b/src/typesafe_sdk/_version.py @@ -2,4 +2,4 @@ from importlib.metadata import version -__version__ = version("typesafe-sdk") +__version__ = version("aphrody-typesafe-sdk") diff --git a/tests/test_clients.py b/tests/test_clients.py index f0fe3ca..34e4331 100644 --- a/tests/test_clients.py +++ b/tests/test_clients.py @@ -410,7 +410,7 @@ async def test_headers_timeout_and_logging(clients: ClientFactory, caplog: pytes assert str(request.url) == "https://example.test/prefix/v1/systemone" assert request.headers["authorization"] == "Bearer test-key" assert request.headers["accept"] == "application/json" - assert request.headers["user-agent"] == f"typesafe-sdk/{version('typesafe-sdk')}" + assert request.headers["user-agent"] == f"typesafe-sdk/{version('aphrody-typesafe-sdk')}" assert request.headers["x-typesafe-sdk"] == request.headers["user-agent"] assert request.headers["x-typesafe-runtime"].startswith("python/") assert "x-typesafe-retry-count" not in request.headers diff --git a/uv.lock b/uv.lock index 76f5bf4..51e182c 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 3 +revision = 5 requires-python = ">=3.10" resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'emscripten'", @@ -32,6 +32,79 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", hash = "sha256:6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101", size = 132079, upload-time = "2026-09-05T10:42:37.923Z" }, ] +[[package]] +name = "aphrody-typesafe-sdk" +version = "0.7.5" +source = { editable = "." } +dependencies = [ + { name = "httpx2" }, + { name = "packaging" }, + { name = "pydantic" }, + { name = "pydantic-core" }, + { name = "tenacity" }, + { name = "truststore", marker = "sys_platform != 'emscripten'" }, + { name = "typing-extensions" }, +] + +[package.optional-dependencies] +http2 = [ + { name = "httpx2", extra = ["http2"] }, +] + +[package.dev-dependencies] +codegen = [ + { name = "datamodel-code-generator" }, +] +dev = [ + { name = "gitpython" }, + { name = "pyrefly" }, + { name = "pytest" }, + { name = "pytest-asyncio" }, + { name = "ruff" }, + { name = "sybil", version = "9.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "sybil", version = "10.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "syrupy" }, + { name = "tach" }, +] +docs = [ + { name = "griffe-pydantic" }, + { name = "mkdocstrings", extra = ["python"] }, + { name = "ruff" }, + { name = "zensical" }, +] + +[package.metadata] +requires-dist = [ + { name = "httpx2", specifier = ">=2.0.0" }, + { name = "httpx2", extras = ["http2"], marker = "extra == 'http2'", specifier = ">=2.0.0" }, + { name = "packaging", specifier = ">=24.0" }, + { name = "pydantic", specifier = ">=2.12.0" }, + { name = "pydantic-core", specifier = ">=2.41.1" }, + { name = "tenacity", specifier = ">=9.0.0" }, + { name = "truststore", marker = "sys_platform != 'emscripten'", specifier = ">=0.10.0" }, + { name = "typing-extensions", specifier = ">=4.13.0" }, +] +provides-extras = ["http2"] + +[package.metadata.requires-dev] +codegen = [{ name = "datamodel-code-generator", specifier = ">=0.81.0" }] +dev = [ + { name = "gitpython", specifier = ">=3.1.62" }, + { name = "pyrefly", specifier = ">=1.2.0" }, + { name = "pytest", specifier = ">=9.1.1" }, + { name = "pytest-asyncio", specifier = ">=1.4.0" }, + { name = "ruff", specifier = ">=0.16.6" }, + { name = "sybil", specifier = ">=9.3.0" }, + { name = "syrupy", specifier = ">=6.0.0" }, + { name = "tach", specifier = ">=0.35.0" }, +] +docs = [ + { name = "griffe-pydantic", specifier = ">=1.3.1" }, + { name = "mkdocstrings", extras = ["python"], specifier = ">=1.0.6" }, + { name = "ruff", specifier = ">=0.16.6" }, + { name = "zensical", specifier = ">=0.0.60" }, +] + [[package]] name = "argcomplete" version = "3.7.2" @@ -1236,79 +1309,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8f/eb/461d5f167b6f5c7d97696f397c82f82e3480e003fce3f0a1cd1dd26e2eb2/typeguard-4.6.0-py3-none-any.whl", hash = "sha256:79878165bb86f2cf5d41d159a0ff1792a796cf496882d2fe1b1c6c7049b9cdd7", size = 36884, upload-time = "2026-07-26T08:40:21.868Z" }, ] -[[package]] -name = "typesafe-sdk" -version = "0.7.4" -source = { editable = "." } -dependencies = [ - { name = "httpx2" }, - { name = "packaging" }, - { name = "pydantic" }, - { name = "pydantic-core" }, - { name = "tenacity" }, - { name = "truststore", marker = "sys_platform != 'emscripten'" }, - { name = "typing-extensions" }, -] - -[package.optional-dependencies] -http2 = [ - { name = "httpx2", extra = ["http2"] }, -] - -[package.dev-dependencies] -codegen = [ - { name = "datamodel-code-generator" }, -] -dev = [ - { name = "gitpython" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-asyncio" }, - { name = "ruff" }, - { name = "sybil", version = "9.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "sybil", version = "10.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "syrupy" }, - { name = "tach" }, -] -docs = [ - { name = "griffe-pydantic" }, - { name = "mkdocstrings", extra = ["python"] }, - { name = "ruff" }, - { name = "zensical" }, -] - -[package.metadata] -requires-dist = [ - { name = "httpx2", specifier = ">=2.0.0" }, - { name = "httpx2", extras = ["http2"], marker = "extra == 'http2'", specifier = ">=2.0.0" }, - { name = "packaging", specifier = ">=24.0" }, - { name = "pydantic", specifier = ">=2.12.0" }, - { name = "pydantic-core", specifier = ">=2.41.1" }, - { name = "tenacity", specifier = ">=9.0.0" }, - { name = "truststore", marker = "sys_platform != 'emscripten'", specifier = ">=0.10.0" }, - { name = "typing-extensions", specifier = ">=4.13.0" }, -] -provides-extras = ["http2"] - -[package.metadata.requires-dev] -codegen = [{ name = "datamodel-code-generator", specifier = ">=0.81.0" }] -dev = [ - { name = "gitpython", specifier = ">=3.1.62" }, - { name = "pyrefly", specifier = ">=1.2.0" }, - { name = "pytest", specifier = ">=9.1.1" }, - { name = "pytest-asyncio", specifier = ">=1.4.0" }, - { name = "ruff", specifier = ">=0.16.6" }, - { name = "sybil", specifier = ">=9.3.0" }, - { name = "syrupy", specifier = ">=6.0.0" }, - { name = "tach", specifier = ">=0.35.0" }, -] -docs = [ - { name = "griffe-pydantic", specifier = ">=1.3.1" }, - { name = "mkdocstrings", extras = ["python"], specifier = ">=1.0.6" }, - { name = "ruff", specifier = ">=0.16.6" }, - { name = "zensical", specifier = ">=0.0.60" }, -] - [[package]] name = "typing-extensions" version = "4.16.0"