mirror of
https://github.com/aphrody-labs/typesafe-sdk-python.git
synced 2026-10-13 20:10:40 +00:00
release: publish Aphrody TypeSafe SDK facade
This commit is contained in:
1 parent
e70bf99a89
commit
64fd6be32e
6 files changed
+89
-86
No files matched your search
@@ -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")
|
||||
|
||||
@@ -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:
|
||||
|
||||
|
||||
+10
-7
@@ -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",
|
||||
|
||||
@@ -2,4 +2,4 @@
|
||||
|
||||
from importlib.metadata import version
|
||||
|
||||
__version__ = version("typesafe-sdk")
|
||||
__version__ = version("aphrody-typesafe-sdk")
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in new issue
Block a user