"""Users API endpoints (4 routes)."""
from __future__ import annotations
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from ab.api.models.shared import ListRequest
from ab.api.models.users import User, UserCreateRequest, UserUpdateRequest
from ab.api.base import BaseEndpoint
from ab.api.route import Route
_LIST = Route("POST", "/users/list", request_model="ListRequest", response_model="List[User]")
_ROLES = Route("GET", "/users/roles", response_model="List[str]")
_CREATE = Route("POST", "/users/user", request_model="UserCreateRequest")
_UPDATE = Route("PUT", "/users/user", request_model="UserUpdateRequest")
[docs]
class UsersEndpoint(BaseEndpoint):
"""User management (ACPortal API)."""
[docs]
def list(self, *, data: ListRequest | dict) -> list[User]:
"""POST /users/list.
Args:
data: List filter with pagination, sorting, and filters.
Accepts a :class:`ListRequest` instance or a dict.
Request model: :class:`ListRequest`
Docs: https://ab-sdk.readthedocs.io/en/latest/api/users/list.html
Request model: ListRequest
Response model: List[User]
"""
return self._request(_LIST, json=data)
[docs]
def get_roles(self) -> list[str]:
"""GET /users/roles
Docs: https://ab-sdk.readthedocs.io/en/latest/api/users/get_roles.html
"""
return self._request(_ROLES)
[docs]
def create(self, *, data: UserCreateRequest | dict) -> None:
"""POST /users/user.
Args:
data: User creation payload.
Accepts a :class:`UserCreateRequest` instance or a dict.
Request model: :class:`UserCreateRequest`
Docs: https://ab-sdk.readthedocs.io/en/latest/api/users/create.html
Request model: UserCreateRequest
"""
return self._request(_CREATE, json=data)
[docs]
def update(self, *, data: UserUpdateRequest | dict) -> None:
"""PUT /users/user.
Args:
data: User update payload.
Accepts a :class:`UserUpdateRequest` instance or a dict.
Request model: :class:`UserUpdateRequest`
Docs: https://ab-sdk.readthedocs.io/en/latest/api/users/update.html
Request model: UserUpdateRequest
"""
return self._request(_UPDATE, json=data)