Files
barker/barker/views/device.py

122 lines
3.0 KiB
Python

import uuid
import transaction
from pyramid.response import Response
from pyramid.view import view_config
from barker.models import Device
from barker.models.validation_exception import ValidationError
@view_config(
request_method="POST",
route_name="v1_devices_new",
renderer="json",
permission="Tables",
trans=True,
)
def save(request):
json = request.json_body
name = json.get("name", "").strip()
if name == "":
raise ValidationError("Name cannot be blank")
section = json.get("section", None)
if section is None:
raise ValidationError("please choose a section")
section_id = uuid.UUID(section["id"])
item = Device(name, section_id)
request.dbsession.add(item)
transaction.commit()
return device_info(item.id, request.dbsession)
@view_config(
request_method="PUT",
route_name="v1_devices_id",
renderer="json",
permission="Tables",
trans=True,
)
def update(request):
json = request.json_body
item = (
request.dbsession.query(Device)
.filter(Device.id == uuid.UUID(request.matchdict["id"]))
.first()
)
if item.is_fixture:
raise ValidationError(
"{0} is a fixture and cannot be edited or deleted.".format(item.full_name)
)
item.name = json["name"].strip()
item.section_id = uuid.UUID(json["section"]["id"])
transaction.commit()
return device_info(item.id, request.dbsession)
@view_config(
request_method="DELETE",
route_name="v1_devices_id",
renderer="json",
permission="Tables",
trans=True,
)
def delete(request):
item = (
request.dbsession.query(Device)
.filter(Device.id == uuid.UUID(request.matchdict["id"]))
.first()
)
if item is None:
response = Response("Device not Found")
response.status_int = 500
return response
else:
response = Response("Device deletion not implemented")
response.status_int = 500
return response
@view_config(
request_method="GET",
route_name="v1_devices_new",
renderer="json",
permission="Tables",
)
def show_blank(request):
return device_info(None, request.dbsession)
@view_config(
request_method="GET",
route_name="v1_devices_id",
renderer="json",
permission="Tables",
)
def show_id(request):
return device_info(uuid.UUID(request.matchdict["id"]), request.dbsession)
@view_config(
request_method="GET",
route_name="v1_devices_list",
renderer="json",
permission="Authenticated",
)
def show_list(request):
return [
device_info(item, request.dbsession)
for item in request.dbsession.query(Device).order_by(Device.name).all()
]
def device_info(item, dbsession):
if item is None:
return {"name": "", "section": {}}
if type(item) is uuid.UUID:
item = dbsession.query(Device).filter(Device.id == item).first()
return {
"id": item.id,
"name": item.name,
"section": {"id": item.section_id, "name": item.section.name},
}