Source code for app.schemas.device

"""
Device schemas for API validation
"""

from pydantic import BaseModel, Field
from typing import Dict, Any, Optional, List
from datetime import datetime
from enum import Enum


class DeviceStatus(str, Enum):
    """Device status enumeration"""
    discovered = "discovered"
    claimed = "claimed"
    online = "online"
    offline = "offline"
    error = "error"


class DeviceBase(BaseModel):
    """Base device schema"""
    name: str = Field(..., min_length=1, max_length=255)
    type: str = Field(..., min_length=1, max_length=64)
    capabilities: Dict[str, Any] = Field(default_factory=dict)
    device_metadata: Dict[str, Any] = Field(default_factory=dict)


[docs] class DeviceCreate(DeviceBase): """Schema for creating a device""" id: str = Field(..., min_length=1, max_length=64) ip_address: Optional[str] = None mac_address: Optional[str] = None
[docs] class DeviceUpdate(BaseModel): """Schema for updating a device""" name: Optional[str] = Field(None, min_length=1, max_length=255) status: Optional[DeviceStatus] = None capabilities: Optional[Dict[str, Any]] = None device_metadata: Optional[Dict[str, Any]] = None ip_address: Optional[str] = None
[docs] class DeviceResponse(DeviceBase): """Schema for device responses""" id: str status: DeviceStatus claimed: bool ip_address: Optional[str] mac_address: Optional[str] last_seen: Optional[datetime] created_at: datetime updated_at: datetime model_config = { "from_attributes": True }
[docs] class DeviceList(BaseModel): """Schema for device list responses""" devices: List[DeviceResponse] total: int