from sanic import response
from caspia.homeserver.models.schemas import WallSchema
from .base import View
[docs]class WallView(View):
[docs] async def get(self, request, identifier):
fields = request.args.get('fields', 'identifier,name,layout,tiles').split(',')
wall = await self.wall_service.get_wall(identifier)
return response.json(WallSchema(only=fields).dump(wall).data)
[docs] async def patch(self, request, identifier):
schema = WallSchema(strict=True, partial=True, exclude=('identifier', ))
data = schema.load(request.json).data
await self.wall_service.update_wall(identifier, data)
wall = await self.wall_service.get_wall(identifier)
return response.json(WallSchema().dump(wall).data)
[docs] async def delete(self, request, identifier):
await self.wall_service.remove_wall(identifier)
return response.HTTPResponse(status=204)
[docs]class WallsView(View):
[docs] async def get(self, request):
fields = request.args.get('fields', 'identifier,name').split(',')
walls = [w async for w in self.wall_service.get_walls()]
return response.json(WallSchema(only=fields, many=True).dump(walls).data)
[docs] async def post(self, request):
data = WallSchema(exclude=('identifier', ), strict=True).load(request.json).data
wall = await self.wall_service.create_wall(data)
return response.json(WallSchema().dump(wall).data)