ó
    ýÞ jy)  ã                  óx   • S r SSKJr  SSKJrJr  SSKJrJr  SSK	J
r
  SSKJr  SSKJrJrJrJr   " S S	5      rg
)z%Async Store client for LangGraph SDK.é    )Úannotations)ÚMappingÚSequence)ÚAnyÚLiteral)Ú
HttpClient)Ú_provided_vals)ÚItemÚListNamespaceResponseÚQueryParamTypesÚSearchItemsResponsec                  ó  • \ rS rSrSrSS jr    S               SS jjrSSSS.           SS jjr  S         SS jjr       S                 SS	 jjr	       S               SS
 jjr
Srg)ÚStoreClienté   a¢  Client for interacting with the graph's shared storage.

The Store provides a key-value storage system for persisting data across graph executions,
allowing for stateful operations and data sharing across threads.

???+ example "Example"

    ```python
    client = get_client(url="http://localhost:2024")
    await client.store.put_item(["users", "user123"], "mem-123451342", {"name": "Alice", "score": 100})
    ```
c                ó   • Xl         g )N©Úhttp)Úselfr   s     ÚT/var/www/html/gaurav/venv/lib/python3.13/site-packages/langgraph_sdk/_async/store.pyÚ__init__ÚStoreClient.__init__    s   € Ø�	ó    Nc             ƒ  ó´   #   • U H  nSU;   d  M  [        SU S35      e   UUUUUS.n	U R                  R                  S[        U	5      XgS9I Sh  v•N   g N7f)a=  Store or update an item.

Args:
    namespace: A list of strings representing the namespace path.
    key: The unique identifier for the item within the namespace.
    value: A dictionary containing the item's data.
    index: Controls search indexing - None (use defaults), False (disable), or list of field paths to index.
    ttl: Optional time-to-live in minutes for the item, or None for no expiration.
    headers: Optional custom headers to include with the request.
    params: Optional query parameters to include with the request.

Returns:
    `None`

???+ example "Example Usage"

    ```python
    client = get_client(url="http://localhost:2024")
    await client.store.put_item(
        ["documents", "user123"],
        key="item456",
        value={"title": "My Document", "content": "Hello World"}
    )
    ```
Ú.úInvalid namespace label 'ú1'. Namespace labels cannot contain periods ('.').)Ú	namespaceÚkeyÚvalueÚindexÚttlú/store/items©ÚjsonÚheadersÚparamsN)Ú
ValueErrorr   Úputr	   )
r   r   r   r   r    r!   r%   r&   ÚlabelÚpayloads
             r   Úput_itemÚStoreClient.put_item#   sx   é € óH ˆEØ�e�|Ü Ø/°¨wÐ6gÐhóð ñ ð #ØØØØñ
ˆð �i‰i�m‰mØ¤°Ó!8À'ð ð 
÷ 	
ó 	
ùs   ‚
A�A AÁAÁA)Úrefresh_ttlr%   r&   c            ƒ  óð   #   • U H  nSU;   d  M  [        SU S35      e   SR                  U5      US.nUb  X7S'   U(       a  0 UE[        U5      EnU R                  R	                  SXtS9I Sh  v•N $  N7f)	aæ  Retrieve a single item.

Args:
    key: The unique identifier for the item.
    namespace: Optional list of strings representing the namespace path.
    refresh_ttl: Whether to refresh the TTL on this read operation. If `None`, uses the store's default behavior.

Returns:
    Item: The retrieved item.
    headers: Optional custom headers to include with the request.
    params: Optional query parameters to include with the request.

???+ example "Example Usage"

    ```python
    client = get_client(url="http://localhost:2024")
    item = await client.store.get_item(
        ["documents", "user123"],
        key="item456",
    )
    print(item)
    ```
    ```shell

    ----------------------------------------------------------------

    {
        'namespace': ['documents', 'user123'],
        'key': 'item456',
        'value': {'title': 'My Document', 'content': 'Hello World'},
        'created_at': '2024-07-30T12:00:00Z',
        'updated_at': '2024-07-30T12:00:00Z'
    }
    ```
r   r   r   ©r   r   Nr-   r"   )r&   r%   )r'   ÚjoinÚdictr   Úget)r   r   r   r-   r%   r&   r)   Ú
get_paramss           r   Úget_itemÚStoreClient.get_itemW   s‰   é € óZ ˆEØ�e�|Ü Ø/°¨wÐ6gÐhóð ñ ð
 47·8±8¸IÓ3FÈsÑ%Sˆ
ØÑ"Ø(3�}Ñ%ÞØ7˜JÐ7¬$¨v«,Ð7ˆJØ—Y‘Y—]‘] >¸*�]ÐV×VÐVÑVùs   ‚
A6�AA6Á/A4Á0A6c             ƒ  ó\   #   • U R                   R                  SXS.UUS9I Sh  v•N   g N7f)aô  Delete an item.

Args:
    key: The unique identifier for the item.
    namespace: Optional list of strings representing the namespace path.
    headers: Optional custom headers to include with the request.
    params: Optional query parameters to include with the request.

Returns:
    `None`

???+ example "Example Usage"

    ```python
    client = get_client(url="http://localhost:2024")
    await client.store.delete_item(
        ["documents", "user123"],
        key="item456",
    )
    ```
r"   r/   r#   N)r   Údelete)r   r   r   r%   r&   s        r   Údelete_itemÚStoreClient.delete_item�   s7   é € ð: �i‰i×ÑØØ(Ñ5ØØð	 ð 
÷ 	
ó 	
ùs   ‚",¤*¥,c	             ƒ  óz   #   • UUUUUUS.n	U R                   R                  S[        U	5      UUS9I Sh  v•N $  N7f)aä  Search for items within a namespace prefix.

Args:
    namespace_prefix: List of strings representing the namespace prefix.
    filter: Optional dictionary of key-value pairs to filter results.
    limit: Maximum number of items to return (default is 10).
    offset: Number of items to skip before returning results (default is 0).
    query: Optional query for natural language search.
    refresh_ttl: Whether to refresh the TTL on items returned by this search. If `None`, uses the store's default behavior.
    headers: Optional custom headers to include with the request.
    params: Optional query parameters to include with the request.

Returns:
    A list of items matching the search criteria.

???+ example "Example Usage"

    ```python
    client = get_client(url="http://localhost:2024")
    items = await client.store.search_items(
        ["documents"],
        filter={"author": "John Doe"},
        limit=5,
        offset=0
    )
    print(items)
    ```
    ```shell

    ----------------------------------------------------------------

    {
        "items": [
            {
                "namespace": ["documents", "user123"],
                "key": "item789",
                "value": {
                    "title": "Another Document",
                    "author": "John Doe"
                },
                "created_at": "2024-07-30T12:00:00Z",
                "updated_at": "2024-07-30T12:00:00Z"
            },
            # ... additional items ...
        ]
    }
    ```
)Únamespace_prefixÚfilterÚlimitÚoffsetÚqueryr-   z/store/items/searchr#   N©r   Úpostr	   )
r   r;   r<   r=   r>   r?   r-   r%   r&   r*   s
             r   Úsearch_itemsÚStoreClient.search_items´   sX   é € ðz !1ØØØØØ&ñ
ˆð —Y‘Y—^‘^Ø!Ü Ó(ØØð	 $ð 
÷ 
ð 	
ñ 
ùs   ‚2;´9µ;c              ƒ  óx   #   • UUUUUS.nU R                   R                  S[        U5      UUS9I Sh  v•N $  N7f)aS  List namespaces with optional match conditions.

Args:
    prefix: Optional list of strings representing the prefix to filter namespaces.
    suffix: Optional list of strings representing the suffix to filter namespaces.
    max_depth: Optional integer specifying the maximum depth of namespaces to return.
    limit: Maximum number of namespaces to return (default is 100).
    offset: Number of namespaces to skip before returning results (default is 0).
    headers: Optional custom headers to include with the request.
    params: Optional query parameters to include with the request.

Returns:
    A list of namespaces matching the criteria.

???+ example "Example Usage"

    ```python
    client = get_client(url="http://localhost:2024")
    namespaces = await client.store.list_namespaces(
        prefix=["documents"],
        max_depth=3,
        limit=10,
        offset=0
    )
    print(namespaces)

    ----------------------------------------------------------------

    [
        ["documents", "user123", "reports"],
        ["documents", "user456", "invoices"],
        ...
    ]
    ```
)ÚprefixÚsuffixÚ	max_depthr=   r>   z/store/namespacesr#   Nr@   )	r   rE   rF   rG   r=   r>   r%   r&   r*   s	            r   Úlist_namespacesÚStoreClient.list_namespaces   sU   é € ð\ ØØ"ØØñ
ˆð —Y‘Y—^‘^ØÜ Ó(ØØð	 $ð 
÷ 
ð 	
ñ 
ùs   ‚1:³8´:r   )r   r   ÚreturnÚNone)NNNN)r   Ústrr   zMapping[str, Any]r    z!Literal[False] | list[str] | Noner!   ú
int | Noner%   úMapping[str, str] | Noner&   úQueryParamTypes | Noner   úSequence[str]rJ   rK   )r   rL   r   rP   r-   úbool | Noner%   rN   r&   rO   rJ   r
   )NN)
r   rL   r%   rN   r&   rO   r   rP   rJ   rK   )Né
   r   NNNN)r<   zMapping[str, Any] | Noner=   Úintr>   rS   r?   z
str | Noner-   rQ   r%   rN   r&   rO   r;   rP   rJ   r   )NNNéd   r   NN)rE   úlist[str] | NonerF   rU   rG   rM   r=   rS   r>   rS   r%   rN   r&   rO   rJ   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r+   r4   r8   rB   rH   Ú__static_attributes__© r   r   r   r      sì  † ñôð 48ØØ,0Ø)-ð2
ð ð	2
ð
 !ð2
ð 1ð2
ð ð2
ð *ð2
ð 'ð2
à ð2
ð 
õ2
ðt $(Ø,0Ø)-ñ7Wð ð	7Wà ð7Wð !ð7Wð *ð7Wð 'ð7Wð 
õ7Wð| -1Ø)-ð"
ð ð	"
ð
 *ð"
ð 'ð"
à ð"
ð 
õ"
ðP ,0ØØØ Ø#'Ø,0Ø)-ðJ
ð )ð	J
ð
 ðJ
ð ðJ
ð ðJ
ð !ðJ
ð *ðJ
ð 'ðJ
à'ðJ
ð 
õJ
ð\ $(Ø#'Ø $ØØØ,0Ø)-ð9
à ð9
ð !ð9
ð ð	9
ð
 ð9
ð ð9
ð *ð9
ð 'ð9
ð 
÷9
ð 9
r   r   N)rZ   Ú
__future__r   Úcollections.abcr   r   Útypingr   r   Úlanggraph_sdk._async.httpr   Úlanggraph_sdk._shared.utilitiesr	   Úlanggraph_sdk.schemar
   r   r   r   r   r\   r   r   Ú<module>rc      s-   ðÙ +å "ç -ß å 0Ý :÷ó ÷g
ò g
r   