Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.25.0"
".": "0.26.0"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 18
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/hyperspell%2Fhyperspell-55497442c9c2cf4077d1e8661fdf82ebe905dbb140ec65421ffa78da6d06a015.yml
openapi_spec_hash: aa9abda3ed926041c12f664e4225c5ed
config_hash: bd953556a1d60f48307815fdaf9ba88b
configured_endpoints: 20
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/hyperspell%2Fhyperspell-cd8c28747615d8967e4e20e6fd5b9488a3022fece37f1c4c133c9b8d9c4415f3.yml
openapi_spec_hash: 2aa6c5d6faa2cbd4038108b5ebc103b3
config_hash: e29127278ff246754ce4801403db0cd9
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,22 @@
# Changelog

## 0.26.0 (2025-10-14)

Full Changelog: [v0.25.0...v0.26.0](https://github.com/hyperspell/python-sdk/compare/v0.25.0...v0.26.0)

### Features

* **api:** api update ([9f27d7f](https://github.com/hyperspell/python-sdk/commit/9f27d7f462d15b54cf1aa62e962da1d34a03e616))
* **api:** api update ([476c23d](https://github.com/hyperspell/python-sdk/commit/476c23d01aae74bc13013d71e32430264d45bab1))
* **api:** update via SDK Studio ([634025a](https://github.com/hyperspell/python-sdk/commit/634025ac77ffe7b2691e53800ee0915dae55e486))
* **api:** update via SDK Studio ([1f502f0](https://github.com/hyperspell/python-sdk/commit/1f502f0278a7c35e76cbdd8b18b0bb3ab8f69287))
* **api:** update via SDK Studio ([df1dc5d](https://github.com/hyperspell/python-sdk/commit/df1dc5d547313a241604e554cf515d904ad196a6))


### Chores

* **internal:** detect missing future annotations with ruff ([210e641](https://github.com/hyperspell/python-sdk/commit/210e641ade71c871f0f80f1c0a0cc043169be302))

## 0.25.0 (2025-09-29)

Full Changelog: [v0.22.1...v0.25.0](https://github.com/hyperspell/python-sdk/compare/v0.22.1...v0.25.0)
Expand Down
10 changes: 8 additions & 2 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,18 @@ from hyperspell.types import QueryResult
Types:

```python
from hyperspell.types import IntegrationRevokeResponse
from hyperspell.types import (
IntegrationListResponse,
IntegrationConnectResponse,
IntegrationRevokeResponse,
)
```

Methods:

- <code title="get /integrations/{provider}/revoke">client.integrations.<a href="./src/hyperspell/resources/integrations/integrations.py">revoke</a>(provider) -> <a href="./src/hyperspell/types/integration_revoke_response.py">IntegrationRevokeResponse</a></code>
- <code title="get /integrations/list">client.integrations.<a href="./src/hyperspell/resources/integrations/integrations.py">list</a>() -> <a href="./src/hyperspell/types/integration_list_response.py">IntegrationListResponse</a></code>
- <code title="get /integrations/{integration_id}/connect">client.integrations.<a href="./src/hyperspell/resources/integrations/integrations.py">connect</a>(integration_id, \*\*<a href="src/hyperspell/types/integration_connect_params.py">params</a>) -> <a href="./src/hyperspell/types/integration_connect_response.py">IntegrationConnectResponse</a></code>
- <code title="get /integrations/{integration_id}/revoke">client.integrations.<a href="./src/hyperspell/resources/integrations/integrations.py">revoke</a>(integration_id) -> <a href="./src/hyperspell/types/integration_revoke_response.py">IntegrationRevokeResponse</a></code>

## GoogleCalendar

Expand Down
6 changes: 5 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "hyperspell"
version = "0.25.0"
version = "0.26.0"
description = "The official Python library for the hyperspell API"
dynamic = ["readme"]
license = "MIT"
Expand Down Expand Up @@ -224,6 +224,8 @@ select = [
"B",
# remove unused imports
"F401",
# check for missing future annotations
"FA102",
# bare except statements
"E722",
# unused arguments
Expand All @@ -246,6 +248,8 @@ unfixable = [
"T203",
]

extend-safe-fixes = ["FA102"]

[tool.ruff.lint.flake8-tidy-imports.banned-api]
"functools.lru_cache".msg = "This function does not retain type information for the wrapped function's arguments; The `lru_cache` function from `_utils` should be used instead"

Expand Down
2 changes: 1 addition & 1 deletion src/hyperspell/_version.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

__title__ = "hyperspell"
__version__ = "0.25.0" # x-release-please-version
__version__ = "0.26.0" # x-release-please-version
166 changes: 157 additions & 9 deletions src/hyperspell/resources/integrations/integrations.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

from __future__ import annotations

from typing import Optional

import httpx

from .slack import (
Expand All @@ -12,7 +14,9 @@
SlackResourceWithStreamingResponse,
AsyncSlackResourceWithStreamingResponse,
)
from ..._types import Body, Query, Headers, NotGiven, not_given
from ...types import integration_connect_params
from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
from ..._utils import maybe_transform, async_maybe_transform
from ..._compat import cached_property
from ..._resource import SyncAPIResource, AsyncAPIResource
from ..._response import (
Expand All @@ -38,7 +42,9 @@
GoogleCalendarResourceWithStreamingResponse,
AsyncGoogleCalendarResourceWithStreamingResponse,
)
from ...types.integration_list_response import IntegrationListResponse
from ...types.integration_revoke_response import IntegrationRevokeResponse
from ...types.integration_connect_response import IntegrationConnectResponse

__all__ = ["IntegrationsResource", "AsyncIntegrationsResource"]

Expand Down Expand Up @@ -75,9 +81,68 @@ def with_streaming_response(self) -> IntegrationsResourceWithStreamingResponse:
"""
return IntegrationsResourceWithStreamingResponse(self)

def list(
self,
*,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> IntegrationListResponse:
"""List all integrations for the user."""
return self._get(
"/integrations/list",
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
cast_to=IntegrationListResponse,
)

def connect(
self,
integration_id: str,
*,
redirect_url: Optional[str] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> IntegrationConnectResponse:
"""
Redirects to the connect URL to link an integration.

Args:
extra_headers: Send extra headers

extra_query: Add additional query parameters to the request

extra_body: Add additional JSON properties to the request

timeout: Override the client-level default timeout for this request, in seconds
"""
if not integration_id:
raise ValueError(f"Expected a non-empty value for `integration_id` but received {integration_id!r}")
return self._get(
f"/integrations/{integration_id}/connect",
options=make_request_options(
extra_headers=extra_headers,
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
query=maybe_transform(
{"redirect_url": redirect_url}, integration_connect_params.IntegrationConnectParams
),
),
cast_to=IntegrationConnectResponse,
)

def revoke(
self,
provider: str,
integration_id: str,
*,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
Expand All @@ -99,10 +164,10 @@ def revoke(

timeout: Override the client-level default timeout for this request, in seconds
"""
if not provider:
raise ValueError(f"Expected a non-empty value for `provider` but received {provider!r}")
if not integration_id:
raise ValueError(f"Expected a non-empty value for `integration_id` but received {integration_id!r}")
return self._get(
f"/integrations/{provider}/revoke",
f"/integrations/{integration_id}/revoke",
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
Expand Down Expand Up @@ -142,9 +207,68 @@ def with_streaming_response(self) -> AsyncIntegrationsResourceWithStreamingRespo
"""
return AsyncIntegrationsResourceWithStreamingResponse(self)

async def list(
self,
*,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> IntegrationListResponse:
"""List all integrations for the user."""
return await self._get(
"/integrations/list",
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
cast_to=IntegrationListResponse,
)

async def connect(
self,
integration_id: str,
*,
redirect_url: Optional[str] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> IntegrationConnectResponse:
"""
Redirects to the connect URL to link an integration.

Args:
extra_headers: Send extra headers

extra_query: Add additional query parameters to the request

extra_body: Add additional JSON properties to the request

timeout: Override the client-level default timeout for this request, in seconds
"""
if not integration_id:
raise ValueError(f"Expected a non-empty value for `integration_id` but received {integration_id!r}")
return await self._get(
f"/integrations/{integration_id}/connect",
options=make_request_options(
extra_headers=extra_headers,
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
query=await async_maybe_transform(
{"redirect_url": redirect_url}, integration_connect_params.IntegrationConnectParams
),
),
cast_to=IntegrationConnectResponse,
)

async def revoke(
self,
provider: str,
integration_id: str,
*,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
Expand All @@ -166,10 +290,10 @@ async def revoke(

timeout: Override the client-level default timeout for this request, in seconds
"""
if not provider:
raise ValueError(f"Expected a non-empty value for `provider` but received {provider!r}")
if not integration_id:
raise ValueError(f"Expected a non-empty value for `integration_id` but received {integration_id!r}")
return await self._get(
f"/integrations/{provider}/revoke",
f"/integrations/{integration_id}/revoke",
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
Expand All @@ -181,6 +305,12 @@ class IntegrationsResourceWithRawResponse:
def __init__(self, integrations: IntegrationsResource) -> None:
self._integrations = integrations

self.list = to_raw_response_wrapper(
integrations.list,
)
self.connect = to_raw_response_wrapper(
integrations.connect,
)
self.revoke = to_raw_response_wrapper(
integrations.revoke,
)
Expand All @@ -202,6 +332,12 @@ class AsyncIntegrationsResourceWithRawResponse:
def __init__(self, integrations: AsyncIntegrationsResource) -> None:
self._integrations = integrations

self.list = async_to_raw_response_wrapper(
integrations.list,
)
self.connect = async_to_raw_response_wrapper(
integrations.connect,
)
self.revoke = async_to_raw_response_wrapper(
integrations.revoke,
)
Expand All @@ -223,6 +359,12 @@ class IntegrationsResourceWithStreamingResponse:
def __init__(self, integrations: IntegrationsResource) -> None:
self._integrations = integrations

self.list = to_streamed_response_wrapper(
integrations.list,
)
self.connect = to_streamed_response_wrapper(
integrations.connect,
)
self.revoke = to_streamed_response_wrapper(
integrations.revoke,
)
Expand All @@ -244,6 +386,12 @@ class AsyncIntegrationsResourceWithStreamingResponse:
def __init__(self, integrations: AsyncIntegrationsResource) -> None:
self._integrations = integrations

self.list = async_to_streamed_response_wrapper(
integrations.list,
)
self.connect = async_to_streamed_response_wrapper(
integrations.connect,
)
self.revoke = async_to_streamed_response_wrapper(
integrations.revoke,
)
Expand Down
3 changes: 3 additions & 0 deletions src/hyperspell/types/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,11 @@
from .memory_delete_response import MemoryDeleteResponse as MemoryDeleteResponse
from .memory_status_response import MemoryStatusResponse as MemoryStatusResponse
from .auth_delete_user_response import AuthDeleteUserResponse as AuthDeleteUserResponse
from .integration_list_response import IntegrationListResponse as IntegrationListResponse
from .integration_connect_params import IntegrationConnectParams as IntegrationConnectParams
from .evaluate_score_query_params import EvaluateScoreQueryParams as EvaluateScoreQueryParams
from .integration_revoke_response import IntegrationRevokeResponse as IntegrationRevokeResponse
from .integration_connect_response import IntegrationConnectResponse as IntegrationConnectResponse
from .evaluate_score_query_response import EvaluateScoreQueryResponse as EvaluateScoreQueryResponse
from .evaluate_score_highlight_params import EvaluateScoreHighlightParams as EvaluateScoreHighlightParams
from .evaluate_score_highlight_response import EvaluateScoreHighlightResponse as EvaluateScoreHighlightResponse
Loading