ba-thesis/backend/schemas/devices.py

71 lines
1.7 KiB
Python

"""This module declareds the pydantic schema representation for devices."""
from datetime import datetime
from abc import ABC
from pydantic import BaseModel, validator
class DeviceModel(BaseModel):
id: int
name: str
picture_code: str
@validator('name')
def assert_name_is_valid(cls, name):
if not len(name):
raise ValueError("Name must not be empty.")
return name
@validator('picture_code')
def assert_picture_is_valid(cls, picture):
if not len(picture):
raise ValueError("Picture must not be empty.")
return picture
class Config:
orm_mode = True
class DeviceCreate(BaseModel):
"""Device schema used for Device creation."""
owner_id: int
model_id: int
@validator('model_id')
def assert_model_id_is_valid(cls, model_id):
if not 1 <= model_id <= 3:
raise ValueError("Model id is invalid.")
return model_id
class DeviceUpdate(BaseModel):
"""Device schema used for Device updates."""
last_seen: datetime
class Device(BaseModel):
"""Device schema used for Device display."""
id: int
model: DeviceModel
added: datetime
last_seen: datetime | None
@validator('added')
def assert_added_is_valid(cls, added):
if added >= datetime.now(added.tzinfo):
raise ValueError("Date added cannot be in the future.")
return added
@validator('last_seen')
def assert_last_seen_is_valid(cls, last_seen):
if last_seen:
if last_seen >= datetime.now(last_seen.tzinfo):
raise ValueError("Date last seen cannot be in the future.")
return last_seen
class Config:
orm_mode = True