Source code for luna_faces.app.handlers.linker_handler

from sanic.response import HTTPResponse

from app.handlers.base_handler import BaseRequestHandler
from app.handlers.schemas import UPDATE_LIST_SCHEMA
from crutches_on_wheels.cow.errors.errors import Error
from crutches_on_wheels.cow.web.query_getters import uuidGetter


[docs]class LinkerHandler(BaseRequestHandler): """ Handler for work with list """
[docs] async def patch(self) -> HTTPResponse: """ Link or unlink face to/from list See `linker`_. .. _`linker`: _static/api.html#operation/linker """ data = self.request.json self.validateJson(data, UPDATE_LIST_SCHEMA, False) listId = data["list_id"] faceIds = set(data["face_ids"]) accountId = self.getQueryParam("account_id", uuidGetter) if not await self.facesContext.isListsExist({listId}, accountId): return self.error(400, error=Error.ListNotFound.format(listId)) nonExistFaceId = await self.facesContext.getNonexistentFaceId(faceIds, accountId) if nonExistFaceId is not None: return self.error(400, error=Error.FacesNotFound.format(nonExistFaceId)) if data["action"] == "attach": await self.facesContext.linkFacesToList(data["list_id"], faceIds) else: await self.facesContext.unlinkFacesFromList(data["list_id"], faceIds) return self.success(204)