Module zep_python.user.client
Expand source code
import urllib.parse
from typing import AsyncGenerator, Generator, List, Optional
import httpx
from httpx import AsyncClient, Client
from zep_python.exceptions import handle_response
from ..memory.models import Session
from .models import CreateUserRequest, UpdateUserRequest, User
class UserClient:
"""
UserClient class implementation for user APIs.
Attributes
----------
aclient : httpx.AsyncClient
The async client used for making API requests.
client : httpx.Client
The client used for making API requests.
"""
def __init__(self, aclient: AsyncClient, client: Client) -> None:
"""
Initialize the UserClient.
Parameters
----------
aclient : httpx.AsyncClient
The async client used for making API requests.
client : httpx.Client
The client used for making API requests.
"""
self.aclient = aclient
self.client = client
def add(self, user: CreateUserRequest) -> User:
"""
Add a user.
Parameters
----------
user : CreateUserRequest
The user to add.
Returns
-------
User
The user that was added.
Raises
------
ConnectionError
If the client fails to connect to the server.
APIError
If the server returns an error.
"""
try:
response = self.client.post(
"/users", json=user.model_dump(exclude_none=True, exclude_unset=True)
)
except httpx.NetworkError as e:
raise ConnectionError("Failed to connect to server") from e
handle_response(response)
return User.model_validate(response.json())
async def aadd(self, user: CreateUserRequest) -> User:
"""
Async add a user.
Parameters
----------
user : CreateUserRequest
The user to add.
Returns
-------
User
The user that was added.
Raises
------
ConnectionError
If the client fails to connect to the server.
APIError
If the server returns an error.
"""
try:
response = await self.aclient.post(
"/users", json=user.model_dump(exclude_none=True, exclude_unset=True)
)
except httpx.NetworkError as e:
raise ConnectionError("Failed to connect to server") from e
handle_response(response)
return User.model_validate(response.json())
def get(self, user_id: str) -> User:
"""
Get a user.
Parameters
----------
user_id : str
The user_id of the user to get.
Returns
-------
User
The user that was retrieved.
Raises
------
ConnectionError
If the client fails to connect to the server.
APIError
If the server returns an error.
NotFoundError
If the user does not exist.
"""
try:
response = self.client.get(f"/users/{urllib.parse.quote_plus(user_id)}")
except httpx.NetworkError as e:
raise ConnectionError("Failed to connect to server") from e
handle_response(response)
return User.model_validate(response.json())
async def aget(self, user_id: str) -> User:
"""
Async get a user.
Parameters
----------
user_id : str
The user_id of the user to get.
Returns
-------
User
The user that was retrieved.
Raises
------
ConnectionError
If the client fails to connect to the server.
APIError
If the server returns an error.
NotFoundError
If the user does not exist.
"""
if user_id is None:
raise ValueError("user_id must be provided")
try:
response = await self.aclient.get(
f"/users/{urllib.parse.quote_plus(user_id)}"
)
except httpx.NetworkError as e:
raise ConnectionError("Failed to connect to server") from e
handle_response(response)
return User.model_validate(response.json())
def update(self, user: UpdateUserRequest) -> User:
"""
Update a user.
Parameters
----------
user : UpdateUserRequest
The user to update.
Returns
-------
User
The user that was updated.
Raises
------
ConnectionError
If the client fails to connect to the server.
APIError
If the server returns an error.
NotFoundError
If the user does not exist
"""
if user.user_id is None:
raise ValueError("user_id must be provided")
try:
response = self.client.patch(
f"/users/{urllib.parse.quote_plus(user.user_id)}",
json=user.model_dump(exclude_none=True, exclude_unset=True),
)
except httpx.NetworkError as e:
raise ConnectionError("Failed to connect to server") from e
handle_response(response)
return User.model_validate(response.json())
async def aupdate(self, user: UpdateUserRequest) -> User:
"""
Async update a user.
Parameters
----------
user : UpdateUserRequest
The user to update.
Returns
-------
User
The user that was updated.
Raises
------
ConnectionError
If the client fails to connect to the server.
APIError
If the server returns an error.
NotFoundError
If the user does not exist.
"""
if user.user_id is None:
raise ValueError("user_id must be provided")
try:
response = await self.aclient.patch(
f"/users/{urllib.parse.quote_plus(user.user_id)}",
json=user.model_dump(exclude_none=True, exclude_unset=True),
)
except httpx.NetworkError as e:
raise ConnectionError("Failed to connect to server") from e
handle_response(response)
return User.model_validate(response.json())
def delete(self, user_id: str) -> None:
"""
Delete a user.
Parameters
----------
user_id : str
The user_id of the user to delete.
Returns
-------
None
Raises
------
ConnectionError
If the client fails to connect to the server.
APIError
If the server returns an error.
NotFoundError
If the user does not exist.
"""
try:
response = self.client.delete(f"/users/{urllib.parse.quote_plus(user_id)}")
except httpx.NetworkError as e:
raise ConnectionError("Failed to connect to server") from e
handle_response(response)
async def adelete(self, user_id: str) -> None:
"""
Async delete a user.
Parameters
----------
user_id : str
The user_id of the user to delete.
Returns
-------
None
Raises
------
ConnectionError
If the client fails to connect to the server.
APIError
If the server returns an error.
NotFoundError
If the user does not exist.
"""
try:
response = await self.aclient.delete(
f"/users/{urllib.parse.quote_plus(user_id)}"
)
except httpx.NetworkError as e:
raise ConnectionError("Failed to connect to server") from e
handle_response(response)
def list(
self, limit: Optional[int] = None, cursor: Optional[int] = None
) -> List[User]:
"""
List users.
Parameters
----------
limit : Optional[int]
The maximum number of users to return.
cursor : Optional[int]
The cursor to use for pagination.
Returns
-------
List[User]
The list of users. If no users are found, an empty list is returned.
Raises
------
ConnectionError
If the client fails to connect to the server.
APIError
If the server returns an error.
"""
try:
response = self.client.get(
"/users", params={"limit": limit, "cursor": cursor}
)
except httpx.NetworkError as e:
raise ConnectionError("Failed to connect to server") from e
handle_response(response)
return [User.model_validate(user) for user in response.json()]
async def alist(
self, limit: Optional[int] = None, cursor: Optional[int] = None
) -> List[User]:
"""
Async list users.
Parameters
----------
limit : Optional[int]
The maximum number of users to return.
cursor : Optional[int]
The cursor to use for pagination.
Returns
-------
List[User]
The list of users. An empty list is returned if there are no users.
Raises
------
ConnectionError
If the client fails to connect to the server.
APIError
If the server returns an error.
"""
try:
response = await self.aclient.get(
"/users", params={"limit": limit, "cursor": cursor}
)
except httpx.NetworkError as e:
raise ConnectionError("Failed to connect to server") from e
handle_response(response)
return [User.model_validate(user) for user in response.json()]
def list_chunked(self, chunk_size: int = 100) -> Generator[List[User], None, None]:
"""
List all users in chunks.
This method uses pagination to retrieve the users in chunks and returns a
generator that yields each chunk of users as a list.
Parameters
----------
chunk_size : int, optional
The number of users to retrieve in each chunk, by default 100
Returns
-------
Generator[List[User], None, None]
A generator that yields each chunk of users as a list.
Raises
------
ConnectionError
If the client fails to connect to the server.
APIError
If the server returns an error.
"""
cursor: Optional[int] = None
while True:
response = self.list(limit=chunk_size, cursor=cursor)
if len(response) == 0:
# We've reached the last page
break
yield response
if cursor is None:
cursor = 0
cursor += chunk_size
async def alist_chunked(
self, chunk_size: int = 100
) -> AsyncGenerator[List[User], None]:
"""
Async list all users in chunks.
This method uses pagination to retrieve the users in chunks and returns a
generator that yields each chunk of users as a list.
Parameters
----------
chunk_size : int, optional
The number of users to retrieve in each chunk, by default 100
Returns
-------
Generator[List[User], None, None]
A generator that yields each chunk of users as a list.
Raises
------
ConnectionError
If the client fails to connect to the server.
APIError
If the server returns an error.
"""
cursor: Optional[int] = None
while True:
response = await self.alist(limit=chunk_size, cursor=cursor)
if len(response) == 0:
# We've reached the last page
break
yield response
if cursor is None:
cursor = 0
cursor += chunk_size
def get_sessions(self, user_id: str) -> List[Session]:
"""
List all sessions associated with this user.
Parameters
----------
user_id : str
The user_id of the user whose sessions to list.
Returns
-------
List[Session]
The list of sessions.
Raises
------
ConnectionError
If the client fails to connect to the server.
APIError
If the server returns an error.
"""
try:
response = self.client.get(
f"/users/{urllib.parse.quote_plus(user_id)}/sessions"
)
except httpx.NetworkError as e:
raise ConnectionError("Failed to connect to server") from e
handle_response(response)
return [Session.model_validate(session) for session in response.json()]
async def aget_sessions(self, user_id: str) -> List[Session]:
"""
Async list all sessions associated with this user.
Parameters
----------
user_id : str
The user_id of the user whose sessions to list.
Returns
-------
List[Session]
The list of sessions.
Raises
------
ConnectionError
If the client fails to connect to the server.
APIError
If the server returns an error.
"""
try:
response = await self.aclient.get(
f"/users/{urllib.parse.quote_plus(user_id)}/sessions"
)
except httpx.NetworkError as e:
raise ConnectionError("Failed to connect to server") from e
handle_response(response)
return [Session.model_validate(session) for session in response.json()]
Classes
class UserClient (aclient: httpx.AsyncClient, client: httpx.Client)
-
UserClient class implementation for user APIs.
Attributes
aclient
:httpx.AsyncClient
- The async client used for making API requests.
client
:httpx.Client
- The client used for making API requests.
Initialize the UserClient.
Parameters
aclient
:httpx.AsyncClient
- The async client used for making API requests.
client
:httpx.Client
- The client used for making API requests.
Expand source code
class UserClient: """ UserClient class implementation for user APIs. Attributes ---------- aclient : httpx.AsyncClient The async client used for making API requests. client : httpx.Client The client used for making API requests. """ def __init__(self, aclient: AsyncClient, client: Client) -> None: """ Initialize the UserClient. Parameters ---------- aclient : httpx.AsyncClient The async client used for making API requests. client : httpx.Client The client used for making API requests. """ self.aclient = aclient self.client = client def add(self, user: CreateUserRequest) -> User: """ Add a user. Parameters ---------- user : CreateUserRequest The user to add. Returns ------- User The user that was added. Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. """ try: response = self.client.post( "/users", json=user.model_dump(exclude_none=True, exclude_unset=True) ) except httpx.NetworkError as e: raise ConnectionError("Failed to connect to server") from e handle_response(response) return User.model_validate(response.json()) async def aadd(self, user: CreateUserRequest) -> User: """ Async add a user. Parameters ---------- user : CreateUserRequest The user to add. Returns ------- User The user that was added. Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. """ try: response = await self.aclient.post( "/users", json=user.model_dump(exclude_none=True, exclude_unset=True) ) except httpx.NetworkError as e: raise ConnectionError("Failed to connect to server") from e handle_response(response) return User.model_validate(response.json()) def get(self, user_id: str) -> User: """ Get a user. Parameters ---------- user_id : str The user_id of the user to get. Returns ------- User The user that was retrieved. Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. NotFoundError If the user does not exist. """ try: response = self.client.get(f"/users/{urllib.parse.quote_plus(user_id)}") except httpx.NetworkError as e: raise ConnectionError("Failed to connect to server") from e handle_response(response) return User.model_validate(response.json()) async def aget(self, user_id: str) -> User: """ Async get a user. Parameters ---------- user_id : str The user_id of the user to get. Returns ------- User The user that was retrieved. Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. NotFoundError If the user does not exist. """ if user_id is None: raise ValueError("user_id must be provided") try: response = await self.aclient.get( f"/users/{urllib.parse.quote_plus(user_id)}" ) except httpx.NetworkError as e: raise ConnectionError("Failed to connect to server") from e handle_response(response) return User.model_validate(response.json()) def update(self, user: UpdateUserRequest) -> User: """ Update a user. Parameters ---------- user : UpdateUserRequest The user to update. Returns ------- User The user that was updated. Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. NotFoundError If the user does not exist """ if user.user_id is None: raise ValueError("user_id must be provided") try: response = self.client.patch( f"/users/{urllib.parse.quote_plus(user.user_id)}", json=user.model_dump(exclude_none=True, exclude_unset=True), ) except httpx.NetworkError as e: raise ConnectionError("Failed to connect to server") from e handle_response(response) return User.model_validate(response.json()) async def aupdate(self, user: UpdateUserRequest) -> User: """ Async update a user. Parameters ---------- user : UpdateUserRequest The user to update. Returns ------- User The user that was updated. Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. NotFoundError If the user does not exist. """ if user.user_id is None: raise ValueError("user_id must be provided") try: response = await self.aclient.patch( f"/users/{urllib.parse.quote_plus(user.user_id)}", json=user.model_dump(exclude_none=True, exclude_unset=True), ) except httpx.NetworkError as e: raise ConnectionError("Failed to connect to server") from e handle_response(response) return User.model_validate(response.json()) def delete(self, user_id: str) -> None: """ Delete a user. Parameters ---------- user_id : str The user_id of the user to delete. Returns ------- None Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. NotFoundError If the user does not exist. """ try: response = self.client.delete(f"/users/{urllib.parse.quote_plus(user_id)}") except httpx.NetworkError as e: raise ConnectionError("Failed to connect to server") from e handle_response(response) async def adelete(self, user_id: str) -> None: """ Async delete a user. Parameters ---------- user_id : str The user_id of the user to delete. Returns ------- None Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. NotFoundError If the user does not exist. """ try: response = await self.aclient.delete( f"/users/{urllib.parse.quote_plus(user_id)}" ) except httpx.NetworkError as e: raise ConnectionError("Failed to connect to server") from e handle_response(response) def list( self, limit: Optional[int] = None, cursor: Optional[int] = None ) -> List[User]: """ List users. Parameters ---------- limit : Optional[int] The maximum number of users to return. cursor : Optional[int] The cursor to use for pagination. Returns ------- List[User] The list of users. If no users are found, an empty list is returned. Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. """ try: response = self.client.get( "/users", params={"limit": limit, "cursor": cursor} ) except httpx.NetworkError as e: raise ConnectionError("Failed to connect to server") from e handle_response(response) return [User.model_validate(user) for user in response.json()] async def alist( self, limit: Optional[int] = None, cursor: Optional[int] = None ) -> List[User]: """ Async list users. Parameters ---------- limit : Optional[int] The maximum number of users to return. cursor : Optional[int] The cursor to use for pagination. Returns ------- List[User] The list of users. An empty list is returned if there are no users. Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. """ try: response = await self.aclient.get( "/users", params={"limit": limit, "cursor": cursor} ) except httpx.NetworkError as e: raise ConnectionError("Failed to connect to server") from e handle_response(response) return [User.model_validate(user) for user in response.json()] def list_chunked(self, chunk_size: int = 100) -> Generator[List[User], None, None]: """ List all users in chunks. This method uses pagination to retrieve the users in chunks and returns a generator that yields each chunk of users as a list. Parameters ---------- chunk_size : int, optional The number of users to retrieve in each chunk, by default 100 Returns ------- Generator[List[User], None, None] A generator that yields each chunk of users as a list. Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. """ cursor: Optional[int] = None while True: response = self.list(limit=chunk_size, cursor=cursor) if len(response) == 0: # We've reached the last page break yield response if cursor is None: cursor = 0 cursor += chunk_size async def alist_chunked( self, chunk_size: int = 100 ) -> AsyncGenerator[List[User], None]: """ Async list all users in chunks. This method uses pagination to retrieve the users in chunks and returns a generator that yields each chunk of users as a list. Parameters ---------- chunk_size : int, optional The number of users to retrieve in each chunk, by default 100 Returns ------- Generator[List[User], None, None] A generator that yields each chunk of users as a list. Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. """ cursor: Optional[int] = None while True: response = await self.alist(limit=chunk_size, cursor=cursor) if len(response) == 0: # We've reached the last page break yield response if cursor is None: cursor = 0 cursor += chunk_size def get_sessions(self, user_id: str) -> List[Session]: """ List all sessions associated with this user. Parameters ---------- user_id : str The user_id of the user whose sessions to list. Returns ------- List[Session] The list of sessions. Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. """ try: response = self.client.get( f"/users/{urllib.parse.quote_plus(user_id)}/sessions" ) except httpx.NetworkError as e: raise ConnectionError("Failed to connect to server") from e handle_response(response) return [Session.model_validate(session) for session in response.json()] async def aget_sessions(self, user_id: str) -> List[Session]: """ Async list all sessions associated with this user. Parameters ---------- user_id : str The user_id of the user whose sessions to list. Returns ------- List[Session] The list of sessions. Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. """ try: response = await self.aclient.get( f"/users/{urllib.parse.quote_plus(user_id)}/sessions" ) except httpx.NetworkError as e: raise ConnectionError("Failed to connect to server") from e handle_response(response) return [Session.model_validate(session) for session in response.json()]
Methods
async def aadd(self, user: CreateUserRequest) ‑> User
-
Async add a user.
Parameters
user
:CreateUserRequest
- The user to add.
Returns
User
- The user that was added.
Raises
ConnectionError
- If the client fails to connect to the server.
APIError
- If the server returns an error.
Expand source code
async def aadd(self, user: CreateUserRequest) -> User: """ Async add a user. Parameters ---------- user : CreateUserRequest The user to add. Returns ------- User The user that was added. Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. """ try: response = await self.aclient.post( "/users", json=user.model_dump(exclude_none=True, exclude_unset=True) ) except httpx.NetworkError as e: raise ConnectionError("Failed to connect to server") from e handle_response(response) return User.model_validate(response.json())
def add(self, user: CreateUserRequest) ‑> User
-
Add a user.
Parameters
user
:CreateUserRequest
- The user to add.
Returns
User
- The user that was added.
Raises
ConnectionError
- If the client fails to connect to the server.
APIError
- If the server returns an error.
Expand source code
def add(self, user: CreateUserRequest) -> User: """ Add a user. Parameters ---------- user : CreateUserRequest The user to add. Returns ------- User The user that was added. Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. """ try: response = self.client.post( "/users", json=user.model_dump(exclude_none=True, exclude_unset=True) ) except httpx.NetworkError as e: raise ConnectionError("Failed to connect to server") from e handle_response(response) return User.model_validate(response.json())
async def adelete(self, user_id: str) ‑> None
-
Async delete a user.
Parameters
user_id
:str
- The user_id of the user to delete.
Returns
None
Raises
ConnectionError
- If the client fails to connect to the server.
APIError
- If the server returns an error.
NotFoundError
- If the user does not exist.
Expand source code
async def adelete(self, user_id: str) -> None: """ Async delete a user. Parameters ---------- user_id : str The user_id of the user to delete. Returns ------- None Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. NotFoundError If the user does not exist. """ try: response = await self.aclient.delete( f"/users/{urllib.parse.quote_plus(user_id)}" ) except httpx.NetworkError as e: raise ConnectionError("Failed to connect to server") from e handle_response(response)
async def aget(self, user_id: str) ‑> User
-
Async get a user.
Parameters
user_id
:str
- The user_id of the user to get.
Returns
User
- The user that was retrieved.
Raises
ConnectionError
- If the client fails to connect to the server.
APIError
- If the server returns an error.
NotFoundError
- If the user does not exist.
Expand source code
async def aget(self, user_id: str) -> User: """ Async get a user. Parameters ---------- user_id : str The user_id of the user to get. Returns ------- User The user that was retrieved. Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. NotFoundError If the user does not exist. """ if user_id is None: raise ValueError("user_id must be provided") try: response = await self.aclient.get( f"/users/{urllib.parse.quote_plus(user_id)}" ) except httpx.NetworkError as e: raise ConnectionError("Failed to connect to server") from e handle_response(response) return User.model_validate(response.json())
async def aget_sessions(self, user_id: str) ‑> List[Session]
-
Async list all sessions associated with this user.
Parameters
user_id
:str
- The user_id of the user whose sessions to list.
Returns
List[Session]
- The list of sessions.
Raises
ConnectionError
- If the client fails to connect to the server.
APIError
- If the server returns an error.
Expand source code
async def aget_sessions(self, user_id: str) -> List[Session]: """ Async list all sessions associated with this user. Parameters ---------- user_id : str The user_id of the user whose sessions to list. Returns ------- List[Session] The list of sessions. Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. """ try: response = await self.aclient.get( f"/users/{urllib.parse.quote_plus(user_id)}/sessions" ) except httpx.NetworkError as e: raise ConnectionError("Failed to connect to server") from e handle_response(response) return [Session.model_validate(session) for session in response.json()]
async def alist(self, limit: Optional[int] = None, cursor: Optional[int] = None) ‑> List[User]
-
Async list users.
Parameters
limit
:Optional[int]
- The maximum number of users to return.
cursor
:Optional[int]
- The cursor to use for pagination.
Returns
List[User]
- The list of users. An empty list is returned if there are no users.
Raises
ConnectionError
- If the client fails to connect to the server.
APIError
- If the server returns an error.
Expand source code
async def alist( self, limit: Optional[int] = None, cursor: Optional[int] = None ) -> List[User]: """ Async list users. Parameters ---------- limit : Optional[int] The maximum number of users to return. cursor : Optional[int] The cursor to use for pagination. Returns ------- List[User] The list of users. An empty list is returned if there are no users. Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. """ try: response = await self.aclient.get( "/users", params={"limit": limit, "cursor": cursor} ) except httpx.NetworkError as e: raise ConnectionError("Failed to connect to server") from e handle_response(response) return [User.model_validate(user) for user in response.json()]
async def alist_chunked(self, chunk_size: int = 100) ‑> AsyncGenerator[List[User], None]
-
Async list all users in chunks.
This method uses pagination to retrieve the users in chunks and returns a generator that yields each chunk of users as a list.
Parameters
chunk_size
:int
, optional- The number of users to retrieve in each chunk, by default 100
Returns
Generator[List[User], None, None]
- A generator that yields each chunk of users as a list.
Raises
ConnectionError
- If the client fails to connect to the server.
APIError
- If the server returns an error.
Expand source code
async def alist_chunked( self, chunk_size: int = 100 ) -> AsyncGenerator[List[User], None]: """ Async list all users in chunks. This method uses pagination to retrieve the users in chunks and returns a generator that yields each chunk of users as a list. Parameters ---------- chunk_size : int, optional The number of users to retrieve in each chunk, by default 100 Returns ------- Generator[List[User], None, None] A generator that yields each chunk of users as a list. Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. """ cursor: Optional[int] = None while True: response = await self.alist(limit=chunk_size, cursor=cursor) if len(response) == 0: # We've reached the last page break yield response if cursor is None: cursor = 0 cursor += chunk_size
async def aupdate(self, user: UpdateUserRequest) ‑> User
-
Async update a user.
Parameters
user
:UpdateUserRequest
- The user to update.
Returns
User
- The user that was updated.
Raises
ConnectionError
- If the client fails to connect to the server.
APIError
- If the server returns an error.
NotFoundError
- If the user does not exist.
Expand source code
async def aupdate(self, user: UpdateUserRequest) -> User: """ Async update a user. Parameters ---------- user : UpdateUserRequest The user to update. Returns ------- User The user that was updated. Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. NotFoundError If the user does not exist. """ if user.user_id is None: raise ValueError("user_id must be provided") try: response = await self.aclient.patch( f"/users/{urllib.parse.quote_plus(user.user_id)}", json=user.model_dump(exclude_none=True, exclude_unset=True), ) except httpx.NetworkError as e: raise ConnectionError("Failed to connect to server") from e handle_response(response) return User.model_validate(response.json())
def delete(self, user_id: str) ‑> None
-
Delete a user.
Parameters
user_id
:str
- The user_id of the user to delete.
Returns
None
Raises
ConnectionError
- If the client fails to connect to the server.
APIError
- If the server returns an error.
NotFoundError
- If the user does not exist.
Expand source code
def delete(self, user_id: str) -> None: """ Delete a user. Parameters ---------- user_id : str The user_id of the user to delete. Returns ------- None Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. NotFoundError If the user does not exist. """ try: response = self.client.delete(f"/users/{urllib.parse.quote_plus(user_id)}") except httpx.NetworkError as e: raise ConnectionError("Failed to connect to server") from e handle_response(response)
def get(self, user_id: str) ‑> User
-
Get a user.
Parameters
user_id
:str
- The user_id of the user to get.
Returns
User
- The user that was retrieved.
Raises
ConnectionError
- If the client fails to connect to the server.
APIError
- If the server returns an error.
NotFoundError
- If the user does not exist.
Expand source code
def get(self, user_id: str) -> User: """ Get a user. Parameters ---------- user_id : str The user_id of the user to get. Returns ------- User The user that was retrieved. Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. NotFoundError If the user does not exist. """ try: response = self.client.get(f"/users/{urllib.parse.quote_plus(user_id)}") except httpx.NetworkError as e: raise ConnectionError("Failed to connect to server") from e handle_response(response) return User.model_validate(response.json())
def get_sessions(self, user_id: str) ‑> List[Session]
-
List all sessions associated with this user.
Parameters
user_id
:str
- The user_id of the user whose sessions to list.
Returns
List[Session]
- The list of sessions.
Raises
ConnectionError
- If the client fails to connect to the server.
APIError
- If the server returns an error.
Expand source code
def get_sessions(self, user_id: str) -> List[Session]: """ List all sessions associated with this user. Parameters ---------- user_id : str The user_id of the user whose sessions to list. Returns ------- List[Session] The list of sessions. Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. """ try: response = self.client.get( f"/users/{urllib.parse.quote_plus(user_id)}/sessions" ) except httpx.NetworkError as e: raise ConnectionError("Failed to connect to server") from e handle_response(response) return [Session.model_validate(session) for session in response.json()]
def list(self, limit: Optional[int] = None, cursor: Optional[int] = None) ‑> List[User]
-
List users.
Parameters
limit
:Optional[int]
- The maximum number of users to return.
cursor
:Optional[int]
- The cursor to use for pagination.
Returns
List[User]
- The list of users. If no users are found, an empty list is returned.
Raises
ConnectionError
- If the client fails to connect to the server.
APIError
- If the server returns an error.
Expand source code
def list( self, limit: Optional[int] = None, cursor: Optional[int] = None ) -> List[User]: """ List users. Parameters ---------- limit : Optional[int] The maximum number of users to return. cursor : Optional[int] The cursor to use for pagination. Returns ------- List[User] The list of users. If no users are found, an empty list is returned. Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. """ try: response = self.client.get( "/users", params={"limit": limit, "cursor": cursor} ) except httpx.NetworkError as e: raise ConnectionError("Failed to connect to server") from e handle_response(response) return [User.model_validate(user) for user in response.json()]
def list_chunked(self, chunk_size: int = 100) ‑> Generator[List[User], None, None]
-
List all users in chunks.
This method uses pagination to retrieve the users in chunks and returns a generator that yields each chunk of users as a list.
Parameters
chunk_size
:int
, optional- The number of users to retrieve in each chunk, by default 100
Returns
Generator[List[User], None, None]
- A generator that yields each chunk of users as a list.
Raises
ConnectionError
- If the client fails to connect to the server.
APIError
- If the server returns an error.
Expand source code
def list_chunked(self, chunk_size: int = 100) -> Generator[List[User], None, None]: """ List all users in chunks. This method uses pagination to retrieve the users in chunks and returns a generator that yields each chunk of users as a list. Parameters ---------- chunk_size : int, optional The number of users to retrieve in each chunk, by default 100 Returns ------- Generator[List[User], None, None] A generator that yields each chunk of users as a list. Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. """ cursor: Optional[int] = None while True: response = self.list(limit=chunk_size, cursor=cursor) if len(response) == 0: # We've reached the last page break yield response if cursor is None: cursor = 0 cursor += chunk_size
def update(self, user: UpdateUserRequest) ‑> User
-
Update a user.
Parameters
user
:UpdateUserRequest
- The user to update.
Returns
User
- The user that was updated.
Raises
ConnectionError
- If the client fails to connect to the server.
APIError
- If the server returns an error.
NotFoundError
- If the user does not exist
Expand source code
def update(self, user: UpdateUserRequest) -> User: """ Update a user. Parameters ---------- user : UpdateUserRequest The user to update. Returns ------- User The user that was updated. Raises ------ ConnectionError If the client fails to connect to the server. APIError If the server returns an error. NotFoundError If the user does not exist """ if user.user_id is None: raise ValueError("user_id must be provided") try: response = self.client.patch( f"/users/{urllib.parse.quote_plus(user.user_id)}", json=user.model_dump(exclude_none=True, exclude_unset=True), ) except httpx.NetworkError as e: raise ConnectionError("Failed to connect to server") from e handle_response(response) return User.model_validate(response.json())