Skip to content

Commit 86878db

Browse files
authored
Merge pull request #99 from hyperspell/release-please--branches--main--changes--next
release: 0.26.0
2 parents 5da7713 + 37ff6e7 commit 86878db

13 files changed

Lines changed: 508 additions & 28 deletions

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "0.25.0"
2+
".": "0.26.0"
33
}

.stats.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
configured_endpoints: 18
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/hyperspell%2Fhyperspell-55497442c9c2cf4077d1e8661fdf82ebe905dbb140ec65421ffa78da6d06a015.yml
3-
openapi_spec_hash: aa9abda3ed926041c12f664e4225c5ed
4-
config_hash: bd953556a1d60f48307815fdaf9ba88b
1+
configured_endpoints: 20
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/hyperspell%2Fhyperspell-cd8c28747615d8967e4e20e6fd5b9488a3022fece37f1c4c133c9b8d9c4415f3.yml
3+
openapi_spec_hash: 2aa6c5d6faa2cbd4038108b5ebc103b3
4+
config_hash: e29127278ff246754ce4801403db0cd9

CHANGELOG.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,22 @@
11
# Changelog
22

3+
## 0.26.0 (2025-10-14)
4+
5+
Full Changelog: [v0.25.0...v0.26.0](https://github.com/hyperspell/python-sdk/compare/v0.25.0...v0.26.0)
6+
7+
### Features
8+
9+
* **api:** api update ([9f27d7f](https://github.com/hyperspell/python-sdk/commit/9f27d7f462d15b54cf1aa62e962da1d34a03e616))
10+
* **api:** api update ([476c23d](https://github.com/hyperspell/python-sdk/commit/476c23d01aae74bc13013d71e32430264d45bab1))
11+
* **api:** update via SDK Studio ([634025a](https://github.com/hyperspell/python-sdk/commit/634025ac77ffe7b2691e53800ee0915dae55e486))
12+
* **api:** update via SDK Studio ([1f502f0](https://github.com/hyperspell/python-sdk/commit/1f502f0278a7c35e76cbdd8b18b0bb3ab8f69287))
13+
* **api:** update via SDK Studio ([df1dc5d](https://github.com/hyperspell/python-sdk/commit/df1dc5d547313a241604e554cf515d904ad196a6))
14+
15+
16+
### Chores
17+
18+
* **internal:** detect missing future annotations with ruff ([210e641](https://github.com/hyperspell/python-sdk/commit/210e641ade71c871f0f80f1c0a0cc043169be302))
19+
320
## 0.25.0 (2025-09-29)
421

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

api.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,18 @@ from hyperspell.types import QueryResult
99
Types:
1010

1111
```python
12-
from hyperspell.types import IntegrationRevokeResponse
12+
from hyperspell.types import (
13+
IntegrationListResponse,
14+
IntegrationConnectResponse,
15+
IntegrationRevokeResponse,
16+
)
1317
```
1418

1519
Methods:
1620

17-
- <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>
21+
- <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>
22+
- <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>
23+
- <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>
1824

1925
## GoogleCalendar
2026

pyproject.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "hyperspell"
3-
version = "0.25.0"
3+
version = "0.26.0"
44
description = "The official Python library for the hyperspell API"
55
dynamic = ["readme"]
66
license = "MIT"
@@ -224,6 +224,8 @@ select = [
224224
"B",
225225
# remove unused imports
226226
"F401",
227+
# check for missing future annotations
228+
"FA102",
227229
# bare except statements
228230
"E722",
229231
# unused arguments
@@ -246,6 +248,8 @@ unfixable = [
246248
"T203",
247249
]
248250

251+
extend-safe-fixes = ["FA102"]
252+
249253
[tool.ruff.lint.flake8-tidy-imports.banned-api]
250254
"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"
251255

src/hyperspell/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
22

33
__title__ = "hyperspell"
4-
__version__ = "0.25.0" # x-release-please-version
4+
__version__ = "0.26.0" # x-release-please-version

src/hyperspell/resources/integrations/integrations.py

Lines changed: 157 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
from __future__ import annotations
44

5+
from typing import Optional
6+
57
import httpx
68

79
from .slack import (
@@ -12,7 +14,9 @@
1214
SlackResourceWithStreamingResponse,
1315
AsyncSlackResourceWithStreamingResponse,
1416
)
15-
from ..._types import Body, Query, Headers, NotGiven, not_given
17+
from ...types import integration_connect_params
18+
from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
19+
from ..._utils import maybe_transform, async_maybe_transform
1620
from ..._compat import cached_property
1721
from ..._resource import SyncAPIResource, AsyncAPIResource
1822
from ..._response import (
@@ -38,7 +42,9 @@
3842
GoogleCalendarResourceWithStreamingResponse,
3943
AsyncGoogleCalendarResourceWithStreamingResponse,
4044
)
45+
from ...types.integration_list_response import IntegrationListResponse
4146
from ...types.integration_revoke_response import IntegrationRevokeResponse
47+
from ...types.integration_connect_response import IntegrationConnectResponse
4248

4349
__all__ = ["IntegrationsResource", "AsyncIntegrationsResource"]
4450

@@ -75,9 +81,68 @@ def with_streaming_response(self) -> IntegrationsResourceWithStreamingResponse:
7581
"""
7682
return IntegrationsResourceWithStreamingResponse(self)
7783

84+
def list(
85+
self,
86+
*,
87+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
88+
# The extra values given here take precedence over values defined on the client or passed to this method.
89+
extra_headers: Headers | None = None,
90+
extra_query: Query | None = None,
91+
extra_body: Body | None = None,
92+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
93+
) -> IntegrationListResponse:
94+
"""List all integrations for the user."""
95+
return self._get(
96+
"/integrations/list",
97+
options=make_request_options(
98+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
99+
),
100+
cast_to=IntegrationListResponse,
101+
)
102+
103+
def connect(
104+
self,
105+
integration_id: str,
106+
*,
107+
redirect_url: Optional[str] | Omit = omit,
108+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
109+
# The extra values given here take precedence over values defined on the client or passed to this method.
110+
extra_headers: Headers | None = None,
111+
extra_query: Query | None = None,
112+
extra_body: Body | None = None,
113+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
114+
) -> IntegrationConnectResponse:
115+
"""
116+
Redirects to the connect URL to link an integration.
117+
118+
Args:
119+
extra_headers: Send extra headers
120+
121+
extra_query: Add additional query parameters to the request
122+
123+
extra_body: Add additional JSON properties to the request
124+
125+
timeout: Override the client-level default timeout for this request, in seconds
126+
"""
127+
if not integration_id:
128+
raise ValueError(f"Expected a non-empty value for `integration_id` but received {integration_id!r}")
129+
return self._get(
130+
f"/integrations/{integration_id}/connect",
131+
options=make_request_options(
132+
extra_headers=extra_headers,
133+
extra_query=extra_query,
134+
extra_body=extra_body,
135+
timeout=timeout,
136+
query=maybe_transform(
137+
{"redirect_url": redirect_url}, integration_connect_params.IntegrationConnectParams
138+
),
139+
),
140+
cast_to=IntegrationConnectResponse,
141+
)
142+
78143
def revoke(
79144
self,
80-
provider: str,
145+
integration_id: str,
81146
*,
82147
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
83148
# The extra values given here take precedence over values defined on the client or passed to this method.
@@ -99,10 +164,10 @@ def revoke(
99164
100165
timeout: Override the client-level default timeout for this request, in seconds
101166
"""
102-
if not provider:
103-
raise ValueError(f"Expected a non-empty value for `provider` but received {provider!r}")
167+
if not integration_id:
168+
raise ValueError(f"Expected a non-empty value for `integration_id` but received {integration_id!r}")
104169
return self._get(
105-
f"/integrations/{provider}/revoke",
170+
f"/integrations/{integration_id}/revoke",
106171
options=make_request_options(
107172
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
108173
),
@@ -142,9 +207,68 @@ def with_streaming_response(self) -> AsyncIntegrationsResourceWithStreamingRespo
142207
"""
143208
return AsyncIntegrationsResourceWithStreamingResponse(self)
144209

210+
async def list(
211+
self,
212+
*,
213+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
214+
# The extra values given here take precedence over values defined on the client or passed to this method.
215+
extra_headers: Headers | None = None,
216+
extra_query: Query | None = None,
217+
extra_body: Body | None = None,
218+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
219+
) -> IntegrationListResponse:
220+
"""List all integrations for the user."""
221+
return await self._get(
222+
"/integrations/list",
223+
options=make_request_options(
224+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
225+
),
226+
cast_to=IntegrationListResponse,
227+
)
228+
229+
async def connect(
230+
self,
231+
integration_id: str,
232+
*,
233+
redirect_url: Optional[str] | Omit = omit,
234+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
235+
# The extra values given here take precedence over values defined on the client or passed to this method.
236+
extra_headers: Headers | None = None,
237+
extra_query: Query | None = None,
238+
extra_body: Body | None = None,
239+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
240+
) -> IntegrationConnectResponse:
241+
"""
242+
Redirects to the connect URL to link an integration.
243+
244+
Args:
245+
extra_headers: Send extra headers
246+
247+
extra_query: Add additional query parameters to the request
248+
249+
extra_body: Add additional JSON properties to the request
250+
251+
timeout: Override the client-level default timeout for this request, in seconds
252+
"""
253+
if not integration_id:
254+
raise ValueError(f"Expected a non-empty value for `integration_id` but received {integration_id!r}")
255+
return await self._get(
256+
f"/integrations/{integration_id}/connect",
257+
options=make_request_options(
258+
extra_headers=extra_headers,
259+
extra_query=extra_query,
260+
extra_body=extra_body,
261+
timeout=timeout,
262+
query=await async_maybe_transform(
263+
{"redirect_url": redirect_url}, integration_connect_params.IntegrationConnectParams
264+
),
265+
),
266+
cast_to=IntegrationConnectResponse,
267+
)
268+
145269
async def revoke(
146270
self,
147-
provider: str,
271+
integration_id: str,
148272
*,
149273
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
150274
# The extra values given here take precedence over values defined on the client or passed to this method.
@@ -166,10 +290,10 @@ async def revoke(
166290
167291
timeout: Override the client-level default timeout for this request, in seconds
168292
"""
169-
if not provider:
170-
raise ValueError(f"Expected a non-empty value for `provider` but received {provider!r}")
293+
if not integration_id:
294+
raise ValueError(f"Expected a non-empty value for `integration_id` but received {integration_id!r}")
171295
return await self._get(
172-
f"/integrations/{provider}/revoke",
296+
f"/integrations/{integration_id}/revoke",
173297
options=make_request_options(
174298
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
175299
),
@@ -181,6 +305,12 @@ class IntegrationsResourceWithRawResponse:
181305
def __init__(self, integrations: IntegrationsResource) -> None:
182306
self._integrations = integrations
183307

308+
self.list = to_raw_response_wrapper(
309+
integrations.list,
310+
)
311+
self.connect = to_raw_response_wrapper(
312+
integrations.connect,
313+
)
184314
self.revoke = to_raw_response_wrapper(
185315
integrations.revoke,
186316
)
@@ -202,6 +332,12 @@ class AsyncIntegrationsResourceWithRawResponse:
202332
def __init__(self, integrations: AsyncIntegrationsResource) -> None:
203333
self._integrations = integrations
204334

335+
self.list = async_to_raw_response_wrapper(
336+
integrations.list,
337+
)
338+
self.connect = async_to_raw_response_wrapper(
339+
integrations.connect,
340+
)
205341
self.revoke = async_to_raw_response_wrapper(
206342
integrations.revoke,
207343
)
@@ -223,6 +359,12 @@ class IntegrationsResourceWithStreamingResponse:
223359
def __init__(self, integrations: IntegrationsResource) -> None:
224360
self._integrations = integrations
225361

362+
self.list = to_streamed_response_wrapper(
363+
integrations.list,
364+
)
365+
self.connect = to_streamed_response_wrapper(
366+
integrations.connect,
367+
)
226368
self.revoke = to_streamed_response_wrapper(
227369
integrations.revoke,
228370
)
@@ -244,6 +386,12 @@ class AsyncIntegrationsResourceWithStreamingResponse:
244386
def __init__(self, integrations: AsyncIntegrationsResource) -> None:
245387
self._integrations = integrations
246388

389+
self.list = async_to_streamed_response_wrapper(
390+
integrations.list,
391+
)
392+
self.connect = async_to_streamed_response_wrapper(
393+
integrations.connect,
394+
)
247395
self.revoke = async_to_streamed_response_wrapper(
248396
integrations.revoke,
249397
)

src/hyperspell/types/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,11 @@
1717
from .memory_delete_response import MemoryDeleteResponse as MemoryDeleteResponse
1818
from .memory_status_response import MemoryStatusResponse as MemoryStatusResponse
1919
from .auth_delete_user_response import AuthDeleteUserResponse as AuthDeleteUserResponse
20+
from .integration_list_response import IntegrationListResponse as IntegrationListResponse
21+
from .integration_connect_params import IntegrationConnectParams as IntegrationConnectParams
2022
from .evaluate_score_query_params import EvaluateScoreQueryParams as EvaluateScoreQueryParams
2123
from .integration_revoke_response import IntegrationRevokeResponse as IntegrationRevokeResponse
24+
from .integration_connect_response import IntegrationConnectResponse as IntegrationConnectResponse
2225
from .evaluate_score_query_response import EvaluateScoreQueryResponse as EvaluateScoreQueryResponse
2326
from .evaluate_score_highlight_params import EvaluateScoreHighlightParams as EvaluateScoreHighlightParams
2427
from .evaluate_score_highlight_response import EvaluateScoreHighlightResponse as EvaluateScoreHighlightResponse

0 commit comments

Comments
 (0)