memwal 0.1.11.dev0__tar.gz → 0.1.11.dev1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/PKG-INFO +1 -1
  2. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/memwal/__init__.py +1 -1
  3. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/memwal/client.py +5 -5
  4. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/pyproject.toml +1 -1
  5. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/tests/test_client.py +34 -1
  6. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/.gitignore +0 -0
  7. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/CHANGELOG.md +0 -0
  8. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/README.md +0 -0
  9. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/examples/.env.example +0 -0
  10. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/examples/.gitignore +0 -0
  11. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/examples/async_remember_demo.py +0 -0
  12. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/examples/interactive_demo.py +0 -0
  13. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/examples/verify_credentials.py +0 -0
  14. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/memwal/compatibility.py +0 -0
  15. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/memwal/middleware.py +0 -0
  16. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/memwal/mock.py +0 -0
  17. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/memwal/types.py +0 -0
  18. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/memwal/utils.py +0 -0
  19. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/notebooks/walrus_memory_python_sdk.ipynb +0 -0
  20. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/run_tests.py +0 -0
  21. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/tests/__init__.py +0 -0
  22. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/tests/test_auth_rejected_message.py +0 -0
  23. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/tests/test_env_presets.py +0 -0
  24. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/tests/test_integration.py +0 -0
  25. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/tests/test_list_namespaces.py +0 -0
  26. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/tests/test_middleware.py +0 -0
  27. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/tests/test_mock.py +0 -0
  28. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/tests/test_normalize_server_url.py +0 -0
  29. {memwal-0.1.11.dev0 → memwal-0.1.11.dev1}/tests/test_signing.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: memwal
3
- Version: 0.1.11.dev0
3
+ Version: 0.1.11.dev1
4
4
  Summary: Python SDK for Walrus Memory — Privacy-first AI memory with Ed25519 signing
5
5
  Project-URL: Homepage, https://memory.walrus.xyz
6
6
  Project-URL: Documentation, https://memory.walrus.xyz
@@ -126,4 +126,4 @@ __all__ = [
126
126
  "RecallManualResult",
127
127
  ]
128
128
 
129
- __version__ = "0.1.11.dev0"
129
+ __version__ = "0.1.11.dev1"
@@ -34,7 +34,7 @@ import re
34
34
  import time
35
35
  import uuid
36
36
  from datetime import datetime, timezone
37
- from typing import Any, Dict, List, Optional, Sequence, Tuple, TypeVar, Union
37
+ from typing import Any, Dict, List, Optional, Sequence, Set, Tuple, TypeVar, Union
38
38
  from urllib.parse import ParseResult, urlencode, urlparse
39
39
 
40
40
  import httpx
@@ -624,7 +624,7 @@ class MemWal:
624
624
  continue
625
625
  raise
626
626
 
627
- still_pending: List[str] = []
627
+ terminal_ids: Set[str] = set()
628
628
  for item in batch.results:
629
629
  if item.status == "done":
630
630
  results[item.job_id] = RememberBulkItemResult(
@@ -633,6 +633,7 @@ class MemWal:
633
633
  status="done",
634
634
  error=None,
635
635
  )
636
+ terminal_ids.add(item.job_id)
636
637
  elif item.status in ("failed", "not_found"):
637
638
  results[item.job_id] = RememberBulkItemResult(
638
639
  id=item.job_id,
@@ -640,9 +641,8 @@ class MemWal:
640
641
  status="failed",
641
642
  error=item.error,
642
643
  )
643
- else:
644
- still_pending.append(item.job_id)
645
- pending = still_pending
644
+ terminal_ids.add(item.job_id)
645
+ pending = [jid for jid in pending if jid not in terminal_ids]
646
646
 
647
647
  ordered = [results[job_id] for job_id in job_ids]
648
648
  succeeded = sum(1 for r in ordered if r.status == "done")
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "memwal"
7
- version = "0.1.11.dev0"
7
+ version = "0.1.11.dev1"
8
8
  description = "Python SDK for Walrus Memory — Privacy-first AI memory with Ed25519 signing"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -10,7 +10,7 @@ from __future__ import annotations
10
10
  import base64
11
11
  import json
12
12
  from datetime import datetime, timedelta, timezone
13
- from typing import Any
13
+ from typing import Any, Sequence
14
14
 
15
15
  import httpx
16
16
  import nacl.signing
@@ -29,6 +29,9 @@ from memwal.types import (
29
29
  RecallParams,
30
30
  RememberBulkAcceptedResult,
31
31
  RememberBulkItem,
32
+ RememberBulkOptions,
33
+ RememberBulkStatusItem,
34
+ RememberBulkStatusResult,
32
35
  RememberManualOptions,
33
36
  ScoringWeights,
34
37
  )
@@ -428,6 +431,36 @@ class TestRememberBulkAsync:
428
431
  assert result.total == 2
429
432
  assert result.status == "pending"
430
433
 
434
+ async def test_job_omitted_from_a_poll_stays_pending(
435
+ self, memwal_client: MemWal
436
+ ) -> None:
437
+ polls = 0
438
+
439
+ async def partial_status(
440
+ job_ids: Sequence[str],
441
+ ) -> RememberBulkStatusResult:
442
+ nonlocal polls
443
+ polls += 1
444
+ job_id = "job-1" if polls == 1 else "job-2"
445
+ return RememberBulkStatusResult(
446
+ results=[
447
+ RememberBulkStatusItem(
448
+ job_id=job_id,
449
+ status="done",
450
+ blob_id=f"blob-for-{job_id}",
451
+ )
452
+ ]
453
+ )
454
+
455
+ memwal_client.get_remember_bulk_status = partial_status # type: ignore[method-assign]
456
+
457
+ result = await memwal_client.wait_for_remember_jobs(
458
+ ["job-1", "job-2"],
459
+ RememberBulkOptions(poll_interval_ms=1, timeout_ms=5_000),
460
+ )
461
+
462
+ assert [item.status for item in result.results] == ["done", "done"]
463
+
431
464
 
432
465
  # ============================================================
433
466
  # recall() tests
File without changes
File without changes
File without changes
File without changes