Source code for ab.api.endpoints.users

"""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)