discovery.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. """
  2. Printer discovery API endpoints.
  3. Provides endpoints for discovering Bambu Lab printers on the local network.
  4. """
  5. import logging
  6. from fastapi import APIRouter
  7. from pydantic import BaseModel
  8. from backend.app.services.discovery import discovery_service
  9. logger = logging.getLogger(__name__)
  10. router = APIRouter(prefix="/discovery", tags=["discovery"])
  11. class DiscoveryStatus(BaseModel):
  12. """Discovery status response."""
  13. running: bool
  14. class DiscoveredPrinterResponse(BaseModel):
  15. """Discovered printer response."""
  16. serial: str
  17. name: str
  18. ip_address: str
  19. model: str | None = None
  20. discovered_at: str | None = None
  21. @router.get("/status", response_model=DiscoveryStatus)
  22. async def get_discovery_status():
  23. """Get the current discovery status."""
  24. return DiscoveryStatus(running=discovery_service.is_running)
  25. @router.post("/start", response_model=DiscoveryStatus)
  26. async def start_discovery(duration: float = 10.0):
  27. """Start printer discovery.
  28. Args:
  29. duration: Discovery duration in seconds (default 10)
  30. """
  31. await discovery_service.start(duration=duration)
  32. return DiscoveryStatus(running=discovery_service.is_running)
  33. @router.post("/stop", response_model=DiscoveryStatus)
  34. async def stop_discovery():
  35. """Stop printer discovery."""
  36. await discovery_service.stop()
  37. return DiscoveryStatus(running=discovery_service.is_running)
  38. @router.get("/printers", response_model=list[DiscoveredPrinterResponse])
  39. async def get_discovered_printers():
  40. """Get list of discovered printers."""
  41. return [
  42. DiscoveredPrinterResponse(
  43. serial=p.serial,
  44. name=p.name,
  45. ip_address=p.ip_address,
  46. model=p.model,
  47. discovered_at=p.discovered_at,
  48. )
  49. for p in discovery_service.discovered_printers
  50. ]