Coverage for demo_server/api/blog/endpoints/posts.py: 100%
45 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-12-05 15:36 +0000
« prev ^ index » next coverage.py v7.10.6, created at 2025-12-05 15:36 +0000
1# Copyright (c) Microsoft Corporation.
2# Licensed under the MIT License.
4import logging 1a
6from flask import request 1a
7from flask_restplus import Resource 1a
8from demo_server.api.blog.business import create_blog_post, update_post, delete_post, get_post 1a
9from demo_server.api.blog.serializers import blog_post, blog_post_public,\ 1a
10 page_of_blog_posts
11from demo_server.api.blog.parsers import pagination_arguments 1a
12from demo_server.api.restplus import api 1a
13from demo_server.database.models import Post 1a
15log = logging.getLogger(__name__) 1a
17ns = api.namespace('blog/posts', description='Operations related to blog posts') 1a
20@ns.route('') 1a
21class PostsCollection(Resource): 1a
23 @api.expect(pagination_arguments) 1a
24 @api.marshal_with(page_of_blog_posts) 1a
25 def get(self): 1a
26 """
27 Returns a list of blog posts.
28 """
29 args = pagination_arguments.parse_args(request) 1qprkboscltudefmghiwvjn
30 page = args.get('page', 1) 1qprkboscltudefmghiwvjn
31 per_page = args.get('per_page', 1) 1qprkboscltudefmghiwvjn
32 posts_query = Post.query 1qprkboscltudefmghiwvjn
33 posts_page = posts_query.paginate(page, per_page) 1qprkboscltudefmghiwvjn
35 return posts_page 1qprkboscltudefmghivjn
37 @api.expect(blog_post_public) 1a
38 @api.marshal_with(blog_post_public) 1a
39 def post(self): 1a
40 """
41 Creates a new blog post.
42 """
43 post = create_blog_post() 1xkbocldefmghijn
44 return post, 201 1xkbocldefmghijn
47@ns.route('/<int:postId>') 1a
48@api.response(404, 'Post not found.') 1a
49@api.response(201, 'Post found.') 1a
50class PostItem(Resource): 1a
52 @api.marshal_with(blog_post) 1a
53 def get(self, postId): 1a
54 """
55 Returns a blog post with matching \"postId\".
56 """
57 return get_post(postId) 1Ayzkbocdefmghij
59 @api.expect(blog_post) 1a
60 @api.response(204, 'Post successfully updated.') 1a
61 def put(self, postId): 1a
62 """
63 Updates a blog post with matching \"postId\" and \"checksum\".
64 """
65 update_post(postId) 1pzBCDEFGHbcldefghij
67 @api.response(204, 'Post successfully deleted.') 1a
68 def delete(self, postId): 1a
69 """
70 Deletes a blog post with matching \"postId\".
71 """
73 delete_post(postId) 1Iykbcldefmghijn
76ns = api.namespace('/', description='Operations related to blog categories') 1a
77@ns.route('/doc') 1a
78class Doc(Resource): 1a
80 def get(self): 1a
81 """
82 Returns list of blog categories.
83 """
84 return api.__schema__ 1Jn