Source code for netbird.resources.groups

"""
Groups resource handler for NetBird API.
"""

from typing import Any, Dict, List

from ..models import GroupCreate, GroupUpdate
from .base import BaseResource


[docs] class GroupsResource(BaseResource): """Handler for NetBird groups API endpoints. Provides methods to manage NetBird groups including listing, creating, retrieving, updating, and deleting groups. """
[docs] def list(self) -> List[Dict[str, Any]]: """List all groups. Returns: List of group dictionaries Example: >>> groups = client.groups.list() >>> for group in groups: ... print(f"Group: {group['name']} ({group['peers_count']} peers)") """ data = self.client.get("groups") return self._parse_list_response(data)
[docs] def create(self, group_data: GroupCreate) -> Dict[str, Any]: """Create a new group. Args: group_data: Group creation data Returns: Created group dictionary Example: >>> group_data = GroupCreate( ... name="Developers", ... peers=["peer-1", "peer-2"] ... ) >>> group = client.groups.create(group_data) """ data = self.client.post( "groups", data=group_data.model_dump(exclude_unset=True) ) return self._parse_response(data)
[docs] def get(self, group_id: str) -> Dict[str, Any]: """Retrieve a specific group. Args: group_id: Unique group identifier Returns: Group dictionary Example: >>> group = client.groups.get("group-123") >>> print(f"Group: {group['name']}") """ data = self.client.get(f"groups/{group_id}") return self._parse_response(data)
[docs] def update(self, group_id: str, group_data: GroupUpdate) -> Dict[str, Any]: """Update a group. Args: group_id: Unique group identifier group_data: Group update data Returns: Updated group dictionary Example: >>> group_data = GroupUpdate( ... name="Senior Developers", ... peers=["peer-1", "peer-2", "peer-3"] ... ) >>> group = client.groups.update("group-123", group_data) """ data = self.client.put( f"groups/{group_id}", data=group_data.model_dump(exclude_unset=True), ) return self._parse_response(data)
[docs] def delete(self, group_id: str) -> None: """Delete a group. Args: group_id: Unique group identifier Example: >>> client.groups.delete("group-123") """ self.client.delete(f"groups/{group_id}")