52 lines
1.5 KiB
Python
52 lines
1.5 KiB
Python
"""Read projections used by the demo API."""
|
|
|
|
from .models import Device, DeviceType, File, Manufacturer
|
|
|
|
|
|
def get_all_manufacturers() -> list[dict]:
|
|
return [item.to_json() for item in Manufacturer.objects.all()]
|
|
|
|
|
|
def get_all_device_types() -> list[dict]:
|
|
return [item.to_json() for item in DeviceType.objects.all()]
|
|
|
|
|
|
def get_all_devices() -> list[dict]:
|
|
devices = Device.objects.select_related(
|
|
"product", "product__manufacturer", "product__device_type"
|
|
)
|
|
return [
|
|
{
|
|
"id": device.id,
|
|
"manufacturer_name": device.product.manufacturer.name,
|
|
"device_type": device.product.device_type.device_type,
|
|
"device_name": device.product.product_name,
|
|
"serial": device.serial,
|
|
"comment": device.comment,
|
|
"created": device.created.isoformat(),
|
|
}
|
|
for device in devices
|
|
]
|
|
|
|
|
|
def get_device_by_id(device_id: int) -> dict:
|
|
device = Device.objects.select_related(
|
|
"product", "product__manufacturer", "product__device_type"
|
|
).get(id=device_id)
|
|
return device.to_json()
|
|
|
|
|
|
def get_files_by_device(device_id: int) -> list[dict]:
|
|
files = File.objects.filter(device_id=device_id).select_related("firmware")
|
|
return [
|
|
{
|
|
"id": file.id,
|
|
"filename": file.filename,
|
|
"ip": file.ip_address,
|
|
"state": file.status,
|
|
"upload": file.upload_time.isoformat(),
|
|
"firmware_version": file.firmware.version,
|
|
}
|
|
for file in files
|
|
]
|