Source code for wp_api.endpoints.users

"""
Users endpoint for the WordPress REST API
"""

from typing import Dict, List, Optional, Any, Union
from .base import BaseEndpoint


[docs] class Users(BaseEndpoint): """WordPress Users API wrapper""" endpoint = "users"
[docs] def list( self, context: str = "view", page: int = 1, per_page: int = 10, search: str = None, exclude: Union[int, List[int]] = None, include: Union[int, List[int]] = None, offset: int = None, order: str = "asc", orderby: str = "name", slug: Union[str, List[str]] = None, roles: Union[str, List[str]] = None, **kwargs ) -> List[Dict]: """ List users with various filtering options Args: context: Scope under which the request is made (view, edit, embed) page: Current page of the collection per_page: Maximum number of items to be returned in result set search: Limit results to those matching a string exclude: Ensure result set excludes specific IDs include: Limit result set to specific IDs offset: Offset the result set by a specific number of items order: Order sort attribute ascending or descending (asc, desc) orderby: Sort collection by object attribute (id, name, registered_date, etc.) slug: Limit result set to users with one or more specific slugs roles: Limit result set to users matching at least one specific role Returns: List of users """ params = { "context": context, "page": page, "per_page": per_page, "order": order, "orderby": orderby, } # Add optional parameters if search: params["search"] = search if exclude: params["exclude"] = exclude if isinstance(exclude, int) else ",".join(map(str, exclude)) if include: params["include"] = include if isinstance(include, int) else ",".join(map(str, include)) if offset: params["offset"] = offset if slug: params["slug"] = slug if isinstance(slug, str) else ",".join(slug) if roles: params["roles"] = roles if isinstance(roles, str) else ",".join(roles) # Add any additional parameters params.update(kwargs) return super().list(**params)
[docs] def create( self, username: str, email: str, password: str, name: str = None, first_name: str = None, last_name: str = None, description: str = None, url: str = None, roles: List[str] = None, **kwargs ) -> Dict: """ Create a new user (requires proper authentication with user creation capabilities) Args: username: Username for the user email: Email address for the user password: Password for the user name: Display name for the user first_name: First name for the user last_name: Last name for the user description: Description/bio for the user url: URL/website for the user roles: List of roles for the user Returns: Created user data """ data = { "username": username, "email": email, "password": password, } if name is not None: data["name"] = name if first_name is not None: data["first_name"] = first_name if last_name is not None: data["last_name"] = last_name if description is not None: data["description"] = description if url is not None: data["url"] = url if roles is not None: data["roles"] = roles # Add any additional data data.update(kwargs) return super().create(data)
[docs] def update( self, id: int, username: str = None, email: str = None, password: str = None, name: str = None, first_name: str = None, last_name: str = None, description: str = None, url: str = None, roles: List[str] = None, **kwargs ) -> Dict: """ Update an existing user Args: id: User ID username: Username for the user email: Email address for the user password: Password for the user name: Display name for the user first_name: First name for the user last_name: Last name for the user description: Description/bio for the user url: URL/website for the user roles: List of roles for the user Returns: Updated user data """ data = {} if username is not None: data["username"] = username if email is not None: data["email"] = email if password is not None: data["password"] = password if name is not None: data["name"] = name if first_name is not None: data["first_name"] = first_name if last_name is not None: data["last_name"] = last_name if description is not None: data["description"] = description if url is not None: data["url"] = url if roles is not None: data["roles"] = roles # Add any additional data data.update(kwargs) return super().update(id, data)
[docs] def me(self, **params) -> Dict: """ Get the current user Args: **params: Query parameters Returns: Current user data """ endpoint = f"{self.endpoint}/me" return self.client.get(endpoint, params)