import typing import logbook from apistar import http, Route, App from apistar_jwt import authentication_required, JWTUser from sqlalchemy.orm import Session from cookie_api.models import Cookie from cookie_api.schema import CookieSchema from cookie_api.util import MetaJSONResponse logger = logbook.Logger(__name__) def get_cookies(session: Session) -> typing.List[CookieSchema]: cookies = session.query(Cookie).all() logger.debug('Cookies collection hit') return [CookieSchema(cookie) for cookie in cookies] def get_cookie(session: Session, id) -> CookieSchema: cookie = session.query(Cookie).filter_by(id=id).one_or_none() if cookie is None: msg = {"error": "404 Not Found"} return MetaJSONResponse(msg, 404) return MetaJSONResponse(CookieSchema(cookie)) @authentication_required def create_cookie(session: Session, cookie_data: CookieSchema, app: App, user: JWTUser): cookie = Cookie(**cookie_data) session.add(cookie) session.commit() headers = {'Location': app.reverse_url('get_cookie', id=cookie.id)} return MetaJSONResponse(CookieSchema(cookie), 201, headers) @authentication_required def delete_cookie(session: Session, id: int, user: JWTUser): cookie = session.query(Cookie).filter_by(id=id).one_or_none() if cookie is None: msg = {"error": "404 Not Found"} return MetaJSONResponse(msg, 204) logger.debug("Deleting cookie {} {}".format(cookie.id, cookie.name)) session.delete(cookie) session.commit() return MetaJSONResponse({}, 204) cookie_routes = [ Route('/cookies', 'GET', get_cookies), Route('/cookies', 'POST', create_cookie), Route('/cookies/{id}', 'GET', get_cookie), Route('/cookies/{id}', 'DELETE', delete_cookie) ]