1
from api import auth, abort, g, Resource, reqparse
2
from api.models.tag import TagModel
3
from api.schemas.tag import TagSchema
4
from flask_apispec.views import MethodResource
5
from flask_apispec import marshal_with, use_kwargs, doc
6
from webargs import fields
10
class TagsResource(MethodResource):
11
@doc(description="Returns tag")
12
@doc(summary="Get tag by id")
13
@doc(responses={200: {"description": "Tag by id"}})
14
@doc(responses={404: {"description": "Tag not found"}})
15
@marshal_with(TagSchema, code=200)
16
def get(self, tag_id):
17
tag = TagModel.query.get(tag_id)
19
abort(404, error=f"Tag with id={tag_id} not found")
23
@doc(security=[{"basicAuth": []}])
24
@doc(description="Returns changed tag")
25
@doc(summary="Change tag name")
26
@doc(responses={201: {"description": "Tag name changed"}})
27
@doc(responses={404: {"description": "Tag not found"}})
28
@use_kwargs({"name": fields.Str()})
29
@marshal_with(TagSchema, code=201)
30
def put(self, tag_id, **kwargs):
31
tag = TagModel.query.get(tag_id)
33
abort(404, error=f"Tag with id={tag_id} not found")
34
tag.name = kwargs["name"]
39
@doc(security=[{"basicAuth": []}])
40
@doc(description="Deletes tag")
41
@doc(summary="Deletes tag by id")
42
@doc(responses={201: {"description": "Tag deleted"}})
43
@doc(responses={404: {"description": "Tag not found"}})
44
@marshal_with(TagSchema, code=201)
45
def delete(self, tag_id):
46
tag = TagModel.query.get(tag_id)
48
abort(404, error=f"Tag with id={tag_id} not found")
54
class TagsListResource(MethodResource):
55
@doc(description="Returns all tags")
56
@doc(summary="Get all tags")
57
@doc(responses={200: {"description": "List of all tags"}})
58
@marshal_with(TagSchema(many=True), code=200)
60
tags = TagModel.query.all()
63
@doc(description="Returns created tag")
64
@doc(summary="Create new tag")
65
@doc(responses={201: {"description": "Created tag"}})
66
@use_kwargs({"name": fields.Str()})
67
@marshal_with(TagSchema, code=201)
68
def post(self, **kwargs):
69
tag = TagModel(**kwargs)