Source code for luna_faces.app.handlers.list_handler

from sanic.response import HTTPResponse

from app.handlers.base_handler import BaseRequestHandler
from app.handlers.helpers import SearchListsFilters
from app.handlers.query_validators import validateIntAsBool
from app.handlers.schemas import PATCH_LIST_USER_SCHEMA
from crutches_on_wheels.cow.errors.errors import Error
from crutches_on_wheels.cow.errors.exception import VLException
from crutches_on_wheels.cow.web.query_getters import uuidGetter


[docs]class ListHandler(BaseRequestHandler): """ Handler for work with list Resource: "/{api_version}/lists/{list_id}" """
[docs] async def checkList(self, listId: str) -> None: """ Checking exist list or not. Args: listId: list id Raises: VLException(Error.ListNotFound, 404, isCriticalError=False): if list is not exist """ accountId = self.getQueryParam("account_id", uuidGetter) if not await self.facesContext.isListsExist({listId}, accountId): raise VLException(Error.ListNotFound.format(listId), 404, isCriticalError=False)
[docs] async def head(self, listId: str) -> HTTPResponse: """ Check list existence. See `spec_check_list`_. .. _spec_check_list: _static/api.html#operation/checkList Returns: response with status code 200 """ await self.checkList(listId) return self.success(200, extraHeaders={"Content-Type": "application/json"})
[docs] async def get(self, listId: str) -> HTTPResponse: """ Get list by id. See `spec_get_list`_. .. _spec_get_list: _static/api.html#operation/getList Returns: response json with list and status code 200 """ accountId = self.getQueryParam("account_id", uuidGetter) filters = SearchListsFilters(account_id=accountId, list_ids=[listId]) lists = await self.facesContext.getLists(filters=filters) if not len(lists): return self.error(404, error=Error.ListNotFound.format(listId)) return self.success(200, outputJson=lists[0])
[docs] async def patch(self, listId: str) -> HTTPResponse: """ Update list user data. See `spec_patch_list`_. .. _spec_patch_list: _static/api.html#operation/patchList Returns: response with status code 204 """ accountId = self.getQueryParam("account_id", uuidGetter) data = self.request.json self.validateJson(data, PATCH_LIST_USER_SCHEMA, False) updatedListCount = await self.facesContext.updateListUserData(listId, data["user_data"], accountId=accountId) if not updatedListCount: raise VLException(Error.ListNotFound.format(listId), 404, isCriticalError=False) return self.success(204)
[docs] async def delete(self, listId: str) -> HTTPResponse: """ Delete list. See `spec_delete_list`_. .. _spec_delete_list: _static/api.html#operation/deleteList Returns: response with status code 204 """ removeWithFaces = self.getQueryParam("with_faces", validateIntAsBool, default=0) accountId = self.getQueryParam("account_id", uuidGetter) removedListCount = await self.facesContext.deleteLists([listId], withFaces=removeWithFaces, accountId=accountId) if not removedListCount: raise VLException(Error.ListNotFound.format(listId), 404, isCriticalError=False) if removeWithFaces: return self.success(202) return self.success(204)