ba-thesis/backend/schemas/devices.py

72 lines
1.7 KiB
Python
Raw Normal View History

"""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