cloud.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. from pydantic import BaseModel, Field
  2. class CloudLoginRequest(BaseModel):
  3. """Request to initiate cloud login."""
  4. email: str = Field(..., description="Bambu Lab account email")
  5. password: str = Field(..., description="Account password")
  6. region: str = Field(default="global", description="Region: 'global' or 'china'")
  7. class CloudVerifyRequest(BaseModel):
  8. """Request to verify login with 2FA code."""
  9. email: str = Field(..., description="Bambu Lab account email")
  10. code: str = Field(..., description="6-digit verification code from email")
  11. class CloudLoginResponse(BaseModel):
  12. """Response from login attempt."""
  13. success: bool
  14. needs_verification: bool = False
  15. message: str
  16. class CloudAuthStatus(BaseModel):
  17. """Current authentication status."""
  18. is_authenticated: bool
  19. email: str | None = None
  20. class CloudTokenRequest(BaseModel):
  21. """Request to set access token directly."""
  22. access_token: str = Field(..., description="Bambu Lab access token")
  23. class SlicerSetting(BaseModel):
  24. """A slicer setting/preset."""
  25. setting_id: str
  26. name: str
  27. type: str # filament, printer, process
  28. version: str | None = None
  29. user_id: str | None = None
  30. updated_time: str | None = None
  31. class SlicerSettingsResponse(BaseModel):
  32. """Response containing slicer settings."""
  33. filament: list[SlicerSetting] = []
  34. printer: list[SlicerSetting] = []
  35. process: list[SlicerSetting] = []
  36. class CloudDevice(BaseModel):
  37. """A bound printer device."""
  38. dev_id: str
  39. name: str
  40. dev_model_name: str | None = None
  41. dev_product_name: str | None = None
  42. online: bool = False
  43. class SlicerSettingCreate(BaseModel):
  44. """Request to create a new slicer preset."""
  45. type: str = Field(..., description="Preset type: 'filament', 'print', or 'printer'")
  46. name: str = Field(..., description="Display name for the preset")
  47. base_id: str = Field(..., description="Base preset ID to inherit from")
  48. version: str = Field(default="2.0.0.0", description="Version string for the preset")
  49. setting: dict = Field(default_factory=dict, description="Setting key-value pairs (delta from base)")
  50. class SlicerSettingUpdate(BaseModel):
  51. """Request to update an existing slicer preset."""
  52. name: str | None = Field(None, description="New display name")
  53. setting: dict | None = Field(None, description="Setting key-value pairs to update")
  54. class SlicerSettingDetail(BaseModel):
  55. """Detailed slicer setting/preset response."""
  56. message: str | None = None
  57. code: str | None = None
  58. error: str | None = None
  59. public: bool = False
  60. version: str | None = None
  61. type: str
  62. name: str
  63. update_time: str | None = None
  64. nickname: str | None = None
  65. base_id: str | None = None
  66. setting: dict = Field(default_factory=dict)
  67. filament_id: str | None = None
  68. setting_id: str | None = None # For response after create
  69. class SlicerSettingDeleteResponse(BaseModel):
  70. """Response from deleting a preset."""
  71. success: bool
  72. message: str