Skip to content

Commit c194b2e

Browse files
feat(api): api update
1 parent d517cbc commit c194b2e

File tree

9 files changed

+8
-213
lines changed

9 files changed

+8
-213
lines changed

.stats.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
configured_endpoints: 11
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/supermemory--inc%2Fsupermemory-603f50d7f791edc333ab3daa15187aa28663836e5352171134e747fe25a263e8.yml
3-
openapi_spec_hash: 28dca6595e16eb68600abb339c43783c
1+
configured_endpoints: 10
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/supermemory--inc%2Fsupermemory-ce16942ff073fdc761f55efe3ba7888070133e624fe3de39cc8af1b54137b421.yml
3+
openapi_spec_hash: 03e1dc871236ce5f3ca653caedc84a42
44
config_hash: 8477e3ee6fd596ab6ac911d052e4de79

README.md

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -77,23 +77,6 @@ Nested request parameters are [TypedDicts](https://docs.python.org/3/library/typ
7777

7878
Typed requests and responses provide autocomplete and documentation within your editor. If you would like to see type errors in VS Code to help catch bugs earlier, set `python.analysis.typeCheckingMode` to `basic`.
7979

80-
## File uploads
81-
82-
Request parameters that correspond to file uploads can be passed as `bytes`, or a [`PathLike`](https://docs.python.org/3/library/os.html#os.PathLike) instance or a tuple of `(filename, contents, media type)`.
83-
84-
```python
85-
from pathlib import Path
86-
from supermemory import Supermemory
87-
88-
client = Supermemory()
89-
90-
client.memories.upload_file(
91-
file=Path("/path/to/file"),
92-
)
93-
```
94-
95-
The async client uses the exact same interface. If you pass a [`PathLike`](https://docs.python.org/3/library/os.html#os.PathLike) instance, the file contents will be read asynchronously automatically.
96-
9780
## Handling errors
9881

9982
When the library is unable to connect to the API (for example, due to network connection problems or a timeout), a subclass of `supermemory.APIConnectionError` is raised.

api.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ from supermemory.types import (
88
MemoryListResponse,
99
MemoryAddResponse,
1010
MemoryGetResponse,
11-
MemoryUploadFileResponse,
1211
)
1312
```
1413

@@ -19,7 +18,6 @@ Methods:
1918
- <code title="delete /v3/memories/{id}">client.memories.<a href="./src/supermemory/resources/memories.py">delete</a>(id) -> None</code>
2019
- <code title="post /v3/memories">client.memories.<a href="./src/supermemory/resources/memories.py">add</a>(\*\*<a href="src/supermemory/types/memory_add_params.py">params</a>) -> <a href="./src/supermemory/types/memory_add_response.py">MemoryAddResponse</a></code>
2120
- <code title="get /v3/memories/{id}">client.memories.<a href="./src/supermemory/resources/memories.py">get</a>(id) -> <a href="./src/supermemory/types/memory_get_response.py">MemoryGetResponse</a></code>
22-
- <code title="post /v3/memories/file">client.memories.<a href="./src/supermemory/resources/memories.py">upload_file</a>(\*\*<a href="src/supermemory/types/memory_upload_file_params.py">params</a>) -> <a href="./src/supermemory/types/memory_upload_file_response.py">MemoryUploadFileResponse</a></code>
2321

2422
# Search
2523

src/supermemory/_files.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def assert_is_file_content(obj: object, *, key: str | None = None) -> None:
3434
if not is_file_content(obj):
3535
prefix = f"Expected entry at `{key}`" if key is not None else f"Expected file input `{obj!r}`"
3636
raise RuntimeError(
37-
f"{prefix} to be bytes, an io.IOBase instance, PathLike or a tuple but received {type(obj)} instead. See https://github.com/supermemoryai/python-sdk/tree/main#file-uploads"
37+
f"{prefix} to be bytes, an io.IOBase instance, PathLike or a tuple but received {type(obj)} instead."
3838
) from None
3939

4040

src/supermemory/resources/memories.py

Lines changed: 4 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22

33
from __future__ import annotations
44

5-
from typing import Dict, List, Union, Mapping, cast
5+
from typing import Dict, List, Union
66
from typing_extensions import Literal
77

88
import httpx
99

10-
from ..types import memory_add_params, memory_list_params, memory_update_params, memory_upload_file_params
11-
from .._types import NOT_GIVEN, Body, Query, Headers, NoneType, NotGiven, FileTypes
12-
from .._utils import extract_files, maybe_transform, deepcopy_minimal, async_maybe_transform
10+
from ..types import memory_add_params, memory_list_params, memory_update_params
11+
from .._types import NOT_GIVEN, Body, Query, Headers, NoneType, NotGiven
12+
from .._utils import maybe_transform, async_maybe_transform
1313
from .._compat import cached_property
1414
from .._resource import SyncAPIResource, AsyncAPIResource
1515
from .._response import (
@@ -23,7 +23,6 @@
2323
from ..types.memory_get_response import MemoryGetResponse
2424
from ..types.memory_list_response import MemoryListResponse
2525
from ..types.memory_update_response import MemoryUpdateResponse
26-
from ..types.memory_upload_file_response import MemoryUploadFileResponse
2726

2827
__all__ = ["MemoriesResource", "AsyncMemoriesResource"]
2928

@@ -309,45 +308,6 @@ def get(
309308
cast_to=MemoryGetResponse,
310309
)
311310

312-
def upload_file(
313-
self,
314-
*,
315-
file: FileTypes,
316-
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
317-
# The extra values given here take precedence over values defined on the client or passed to this method.
318-
extra_headers: Headers | None = None,
319-
extra_query: Query | None = None,
320-
extra_body: Body | None = None,
321-
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
322-
) -> MemoryUploadFileResponse:
323-
"""
324-
Upload a file to be processed
325-
326-
Args:
327-
extra_headers: Send extra headers
328-
329-
extra_query: Add additional query parameters to the request
330-
331-
extra_body: Add additional JSON properties to the request
332-
333-
timeout: Override the client-level default timeout for this request, in seconds
334-
"""
335-
body = deepcopy_minimal({"file": file})
336-
files = extract_files(cast(Mapping[str, object], body), paths=[["file"]])
337-
# It should be noted that the actual Content-Type header that will be
338-
# sent to the server will contain a `boundary` parameter, e.g.
339-
# multipart/form-data; boundary=---abc--
340-
extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})}
341-
return self._post(
342-
"/v3/memories/file",
343-
body=maybe_transform(body, memory_upload_file_params.MemoryUploadFileParams),
344-
files=files,
345-
options=make_request_options(
346-
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
347-
),
348-
cast_to=MemoryUploadFileResponse,
349-
)
350-
351311

352312
class AsyncMemoriesResource(AsyncAPIResource):
353313
@cached_property
@@ -630,45 +590,6 @@ async def get(
630590
cast_to=MemoryGetResponse,
631591
)
632592

633-
async def upload_file(
634-
self,
635-
*,
636-
file: FileTypes,
637-
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
638-
# The extra values given here take precedence over values defined on the client or passed to this method.
639-
extra_headers: Headers | None = None,
640-
extra_query: Query | None = None,
641-
extra_body: Body | None = None,
642-
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
643-
) -> MemoryUploadFileResponse:
644-
"""
645-
Upload a file to be processed
646-
647-
Args:
648-
extra_headers: Send extra headers
649-
650-
extra_query: Add additional query parameters to the request
651-
652-
extra_body: Add additional JSON properties to the request
653-
654-
timeout: Override the client-level default timeout for this request, in seconds
655-
"""
656-
body = deepcopy_minimal({"file": file})
657-
files = extract_files(cast(Mapping[str, object], body), paths=[["file"]])
658-
# It should be noted that the actual Content-Type header that will be
659-
# sent to the server will contain a `boundary` parameter, e.g.
660-
# multipart/form-data; boundary=---abc--
661-
extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})}
662-
return await self._post(
663-
"/v3/memories/file",
664-
body=await async_maybe_transform(body, memory_upload_file_params.MemoryUploadFileParams),
665-
files=files,
666-
options=make_request_options(
667-
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
668-
),
669-
cast_to=MemoryUploadFileResponse,
670-
)
671-
672593

673594
class MemoriesResourceWithRawResponse:
674595
def __init__(self, memories: MemoriesResource) -> None:
@@ -689,9 +610,6 @@ def __init__(self, memories: MemoriesResource) -> None:
689610
self.get = to_raw_response_wrapper(
690611
memories.get,
691612
)
692-
self.upload_file = to_raw_response_wrapper(
693-
memories.upload_file,
694-
)
695613

696614

697615
class AsyncMemoriesResourceWithRawResponse:
@@ -713,9 +631,6 @@ def __init__(self, memories: AsyncMemoriesResource) -> None:
713631
self.get = async_to_raw_response_wrapper(
714632
memories.get,
715633
)
716-
self.upload_file = async_to_raw_response_wrapper(
717-
memories.upload_file,
718-
)
719634

720635

721636
class MemoriesResourceWithStreamingResponse:
@@ -737,9 +652,6 @@ def __init__(self, memories: MemoriesResource) -> None:
737652
self.get = to_streamed_response_wrapper(
738653
memories.get,
739654
)
740-
self.upload_file = to_streamed_response_wrapper(
741-
memories.upload_file,
742-
)
743655

744656

745657
class AsyncMemoriesResourceWithStreamingResponse:
@@ -761,6 +673,3 @@ def __init__(self, memories: AsyncMemoriesResource) -> None:
761673
self.get = async_to_streamed_response_wrapper(
762674
memories.get,
763675
)
764-
self.upload_file = async_to_streamed_response_wrapper(
765-
memories.upload_file,
766-
)

src/supermemory/types/__init__.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,4 @@
1616
from .search_execute_response import SearchExecuteResponse as SearchExecuteResponse
1717
from .setting_update_response import SettingUpdateResponse as SettingUpdateResponse
1818
from .connection_create_params import ConnectionCreateParams as ConnectionCreateParams
19-
from .memory_upload_file_params import MemoryUploadFileParams as MemoryUploadFileParams
2019
from .connection_create_response import ConnectionCreateResponse as ConnectionCreateResponse
21-
from .memory_upload_file_response import MemoryUploadFileResponse as MemoryUploadFileResponse

src/supermemory/types/memory_upload_file_params.py

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/supermemory/types/memory_upload_file_response.py

Lines changed: 0 additions & 11 deletions
This file was deleted.

tests/api_resources/test_memories.py

Lines changed: 0 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
MemoryGetResponse,
1515
MemoryListResponse,
1616
MemoryUpdateResponse,
17-
MemoryUploadFileResponse,
1817
)
1918

2019
base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
@@ -265,40 +264,6 @@ def test_path_params_get(self, client: Supermemory) -> None:
265264
"",
266265
)
267266

268-
@pytest.mark.skip()
269-
@parametrize
270-
def test_method_upload_file(self, client: Supermemory) -> None:
271-
memory = client.memories.upload_file(
272-
file=b"raw file contents",
273-
)
274-
assert_matches_type(MemoryUploadFileResponse, memory, path=["response"])
275-
276-
@pytest.mark.skip()
277-
@parametrize
278-
def test_raw_response_upload_file(self, client: Supermemory) -> None:
279-
response = client.memories.with_raw_response.upload_file(
280-
file=b"raw file contents",
281-
)
282-
283-
assert response.is_closed is True
284-
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
285-
memory = response.parse()
286-
assert_matches_type(MemoryUploadFileResponse, memory, path=["response"])
287-
288-
@pytest.mark.skip()
289-
@parametrize
290-
def test_streaming_response_upload_file(self, client: Supermemory) -> None:
291-
with client.memories.with_streaming_response.upload_file(
292-
file=b"raw file contents",
293-
) as response:
294-
assert not response.is_closed
295-
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
296-
297-
memory = response.parse()
298-
assert_matches_type(MemoryUploadFileResponse, memory, path=["response"])
299-
300-
assert cast(Any, response.is_closed) is True
301-
302267

303268
class TestAsyncMemories:
304269
parametrize = pytest.mark.parametrize("async_client", [False, True], indirect=True, ids=["loose", "strict"])
@@ -544,37 +509,3 @@ async def test_path_params_get(self, async_client: AsyncSupermemory) -> None:
544509
await async_client.memories.with_raw_response.get(
545510
"",
546511
)
547-
548-
@pytest.mark.skip()
549-
@parametrize
550-
async def test_method_upload_file(self, async_client: AsyncSupermemory) -> None:
551-
memory = await async_client.memories.upload_file(
552-
file=b"raw file contents",
553-
)
554-
assert_matches_type(MemoryUploadFileResponse, memory, path=["response"])
555-
556-
@pytest.mark.skip()
557-
@parametrize
558-
async def test_raw_response_upload_file(self, async_client: AsyncSupermemory) -> None:
559-
response = await async_client.memories.with_raw_response.upload_file(
560-
file=b"raw file contents",
561-
)
562-
563-
assert response.is_closed is True
564-
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
565-
memory = await response.parse()
566-
assert_matches_type(MemoryUploadFileResponse, memory, path=["response"])
567-
568-
@pytest.mark.skip()
569-
@parametrize
570-
async def test_streaming_response_upload_file(self, async_client: AsyncSupermemory) -> None:
571-
async with async_client.memories.with_streaming_response.upload_file(
572-
file=b"raw file contents",
573-
) as response:
574-
assert not response.is_closed
575-
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
576-
577-
memory = await response.parse()
578-
assert_matches_type(MemoryUploadFileResponse, memory, path=["response"])
579-
580-
assert cast(Any, response.is_closed) is True

0 commit comments

Comments
 (0)