Skip to content

Commit e92cb27

Browse files
feat(api): manual updates
1 parent 85c6969 commit e92cb27

File tree

3 files changed

+54
-34
lines changed

3 files changed

+54
-34
lines changed

.stats.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
configured_endpoints: 18
22
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/supermemory--inc%2Fsupermemory-new-b7bf8402df5372a3fac3cb55e083d7c09867328639cb7e2ceb7826de125ccff7.yml
33
openapi_spec_hash: a91c06034ad9e8a7315927d6f2e18521
4-
config_hash: 2737bce9823a13e0263c0fa2701821fa
4+
config_hash: 5deef1e3a49e3a7816348fbf7ba259bf

README.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,8 @@ from supermemory import Supermemory
160160
client = Supermemory()
161161

162162
try:
163-
client.memories.update(
164-
id="id",
163+
client.memories.add(
164+
content="This is a detailed article about machine learning concepts...",
165165
)
166166
except supermemory.APIConnectionError as e:
167167
print("The server could not be reached")
@@ -205,8 +205,8 @@ client = Supermemory(
205205
)
206206

207207
# Or, configure per-request:
208-
client.with_options(max_retries=5).memories.update(
209-
id="id",
208+
client.with_options(max_retries=5).memories.add(
209+
content="This is a detailed article about machine learning concepts...",
210210
)
211211
```
212212

@@ -230,8 +230,8 @@ client = Supermemory(
230230
)
231231

232232
# Override per-request:
233-
client.with_options(timeout=5.0).memories.update(
234-
id="id",
233+
client.with_options(timeout=5.0).memories.add(
234+
content="This is a detailed article about machine learning concepts...",
235235
)
236236
```
237237

@@ -273,12 +273,12 @@ The "raw" Response object can be accessed by prefixing `.with_raw_response.` to
273273
from supermemory import Supermemory
274274

275275
client = Supermemory()
276-
response = client.memories.with_raw_response.update(
277-
id="id",
276+
response = client.memories.with_raw_response.add(
277+
content="This is a detailed article about machine learning concepts...",
278278
)
279279
print(response.headers.get('X-My-Header'))
280280

281-
memory = response.parse() # get the object that `memories.update()` would have returned
281+
memory = response.parse() # get the object that `memories.add()` would have returned
282282
print(memory.id)
283283
```
284284

@@ -293,8 +293,8 @@ The above interface eagerly reads the full response body when you make the reque
293293
To stream the response body, use `.with_streaming_response` instead, which requires a context manager and only reads the response body once you call `.read()`, `.text()`, `.json()`, `.iter_bytes()`, `.iter_text()`, `.iter_lines()` or `.parse()`. In the async client, these are async methods.
294294

295295
```python
296-
with client.memories.with_streaming_response.update(
297-
id="id",
296+
with client.memories.with_streaming_response.add(
297+
content="This is a detailed article about machine learning concepts...",
298298
) as response:
299299
print(response.headers.get("X-My-Header"))
300300

tests/test_client.py

Lines changed: 42 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -724,20 +724,24 @@ def test_parse_retry_after_header(self, remaining_retries: int, retry_after: str
724724
@mock.patch("supermemory._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout)
725725
@pytest.mark.respx(base_url=base_url)
726726
def test_retrying_timeout_errors_doesnt_leak(self, respx_mock: MockRouter, client: Supermemory) -> None:
727-
respx_mock.patch("/v3/documents/id").mock(side_effect=httpx.TimeoutException("Test timeout error"))
727+
respx_mock.post("/v3/documents").mock(side_effect=httpx.TimeoutException("Test timeout error"))
728728

729729
with pytest.raises(APITimeoutError):
730-
client.memories.with_streaming_response.update(id="id").__enter__()
730+
client.memories.with_streaming_response.add(
731+
content="This is a detailed article about machine learning concepts..."
732+
).__enter__()
731733

732734
assert _get_open_connections(self.client) == 0
733735

734736
@mock.patch("supermemory._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout)
735737
@pytest.mark.respx(base_url=base_url)
736738
def test_retrying_status_errors_doesnt_leak(self, respx_mock: MockRouter, client: Supermemory) -> None:
737-
respx_mock.patch("/v3/documents/id").mock(return_value=httpx.Response(500))
739+
respx_mock.post("/v3/documents").mock(return_value=httpx.Response(500))
738740

739741
with pytest.raises(APIStatusError):
740-
client.memories.with_streaming_response.update(id="id").__enter__()
742+
client.memories.with_streaming_response.add(
743+
content="This is a detailed article about machine learning concepts..."
744+
).__enter__()
741745
assert _get_open_connections(self.client) == 0
742746

743747
@pytest.mark.parametrize("failures_before_success", [0, 2, 4])
@@ -764,9 +768,11 @@ def retry_handler(_request: httpx.Request) -> httpx.Response:
764768
return httpx.Response(500)
765769
return httpx.Response(200)
766770

767-
respx_mock.patch("/v3/documents/id").mock(side_effect=retry_handler)
771+
respx_mock.post("/v3/documents").mock(side_effect=retry_handler)
768772

769-
response = client.memories.with_raw_response.update(id="id")
773+
response = client.memories.with_raw_response.add(
774+
content="This is a detailed article about machine learning concepts..."
775+
)
770776

771777
assert response.retries_taken == failures_before_success
772778
assert int(response.http_request.headers.get("x-stainless-retry-count")) == failures_before_success
@@ -788,9 +794,12 @@ def retry_handler(_request: httpx.Request) -> httpx.Response:
788794
return httpx.Response(500)
789795
return httpx.Response(200)
790796

791-
respx_mock.patch("/v3/documents/id").mock(side_effect=retry_handler)
797+
respx_mock.post("/v3/documents").mock(side_effect=retry_handler)
792798

793-
response = client.memories.with_raw_response.update(id="id", extra_headers={"x-stainless-retry-count": Omit()})
799+
response = client.memories.with_raw_response.add(
800+
content="This is a detailed article about machine learning concepts...",
801+
extra_headers={"x-stainless-retry-count": Omit()},
802+
)
794803

795804
assert len(response.http_request.headers.get_list("x-stainless-retry-count")) == 0
796805

@@ -811,9 +820,12 @@ def retry_handler(_request: httpx.Request) -> httpx.Response:
811820
return httpx.Response(500)
812821
return httpx.Response(200)
813822

814-
respx_mock.patch("/v3/documents/id").mock(side_effect=retry_handler)
823+
respx_mock.post("/v3/documents").mock(side_effect=retry_handler)
815824

816-
response = client.memories.with_raw_response.update(id="id", extra_headers={"x-stainless-retry-count": "42"})
825+
response = client.memories.with_raw_response.add(
826+
content="This is a detailed article about machine learning concepts...",
827+
extra_headers={"x-stainless-retry-count": "42"},
828+
)
817829

818830
assert response.http_request.headers.get("x-stainless-retry-count") == "42"
819831

@@ -1541,10 +1553,12 @@ async def test_parse_retry_after_header(self, remaining_retries: int, retry_afte
15411553
async def test_retrying_timeout_errors_doesnt_leak(
15421554
self, respx_mock: MockRouter, async_client: AsyncSupermemory
15431555
) -> None:
1544-
respx_mock.patch("/v3/documents/id").mock(side_effect=httpx.TimeoutException("Test timeout error"))
1556+
respx_mock.post("/v3/documents").mock(side_effect=httpx.TimeoutException("Test timeout error"))
15451557

15461558
with pytest.raises(APITimeoutError):
1547-
await async_client.memories.with_streaming_response.update(id="id").__aenter__()
1559+
await async_client.memories.with_streaming_response.add(
1560+
content="This is a detailed article about machine learning concepts..."
1561+
).__aenter__()
15481562

15491563
assert _get_open_connections(self.client) == 0
15501564

@@ -1553,10 +1567,12 @@ async def test_retrying_timeout_errors_doesnt_leak(
15531567
async def test_retrying_status_errors_doesnt_leak(
15541568
self, respx_mock: MockRouter, async_client: AsyncSupermemory
15551569
) -> None:
1556-
respx_mock.patch("/v3/documents/id").mock(return_value=httpx.Response(500))
1570+
respx_mock.post("/v3/documents").mock(return_value=httpx.Response(500))
15571571

15581572
with pytest.raises(APIStatusError):
1559-
await async_client.memories.with_streaming_response.update(id="id").__aenter__()
1573+
await async_client.memories.with_streaming_response.add(
1574+
content="This is a detailed article about machine learning concepts..."
1575+
).__aenter__()
15601576
assert _get_open_connections(self.client) == 0
15611577

15621578
@pytest.mark.parametrize("failures_before_success", [0, 2, 4])
@@ -1584,9 +1600,11 @@ def retry_handler(_request: httpx.Request) -> httpx.Response:
15841600
return httpx.Response(500)
15851601
return httpx.Response(200)
15861602

1587-
respx_mock.patch("/v3/documents/id").mock(side_effect=retry_handler)
1603+
respx_mock.post("/v3/documents").mock(side_effect=retry_handler)
15881604

1589-
response = await client.memories.with_raw_response.update(id="id")
1605+
response = await client.memories.with_raw_response.add(
1606+
content="This is a detailed article about machine learning concepts..."
1607+
)
15901608

15911609
assert response.retries_taken == failures_before_success
15921610
assert int(response.http_request.headers.get("x-stainless-retry-count")) == failures_before_success
@@ -1609,10 +1627,11 @@ def retry_handler(_request: httpx.Request) -> httpx.Response:
16091627
return httpx.Response(500)
16101628
return httpx.Response(200)
16111629

1612-
respx_mock.patch("/v3/documents/id").mock(side_effect=retry_handler)
1630+
respx_mock.post("/v3/documents").mock(side_effect=retry_handler)
16131631

1614-
response = await client.memories.with_raw_response.update(
1615-
id="id", extra_headers={"x-stainless-retry-count": Omit()}
1632+
response = await client.memories.with_raw_response.add(
1633+
content="This is a detailed article about machine learning concepts...",
1634+
extra_headers={"x-stainless-retry-count": Omit()},
16161635
)
16171636

16181637
assert len(response.http_request.headers.get_list("x-stainless-retry-count")) == 0
@@ -1635,10 +1654,11 @@ def retry_handler(_request: httpx.Request) -> httpx.Response:
16351654
return httpx.Response(500)
16361655
return httpx.Response(200)
16371656

1638-
respx_mock.patch("/v3/documents/id").mock(side_effect=retry_handler)
1657+
respx_mock.post("/v3/documents").mock(side_effect=retry_handler)
16391658

1640-
response = await client.memories.with_raw_response.update(
1641-
id="id", extra_headers={"x-stainless-retry-count": "42"}
1659+
response = await client.memories.with_raw_response.add(
1660+
content="This is a detailed article about machine learning concepts...",
1661+
extra_headers={"x-stainless-retry-count": "42"},
16421662
)
16431663

16441664
assert response.http_request.headers.get("x-stainless-retry-count") == "42"

0 commit comments

Comments
 (0)