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:44 +0000
« prev ^ index » next coverage.py v7.10.6, created at 2025-12-05 15:44 +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) 22 R ; 3 4 5 6 = 7 8 9 ! B C F ? b c d G e f g D h i # $ % ' ( j k l m n @ [ ] ^ _ ` { | } H I J K L M o ) * S + , N p E T U - V . W ~ q O abr bbcbdbebs fbgbX t hbibu jbkblbmbY v nbobw pbx P Z Q 0 / qby : 1 z A
30 page = args.get('page', 1) 22 R ; 3 4 5 6 = 7 8 9 ! B C F ? b c d G e f g D h i # $ % ' ( j k l m n @ [ ] ^ _ ` { | } H I J K L M o ) * S + , N p E T U - V . W ~ q O abr bbcbdbebs fbgbX t hbibu jbkblbmbY v nbobw pbx P Z Q 0 / qby : 1 z A
31 per_page = args.get('per_page', 1) 22 R ; 3 4 5 6 = 7 8 9 ! B C F ? b c d G e f g D h i # $ % ' ( j k l m n @ [ ] ^ _ ` { | } H I J K L M o ) * S + , N p E T U - V . W ~ q O abr bbcbdbebs fbgbX t hbibu jbkblbmbY v nbobw pbx P Z Q 0 / qby : 1 z A
32 posts_query = Post.query 22 R ; 3 4 5 6 = 7 8 9 ! B C F ? b c d G e f g D h i # $ % ' ( j k l m n @ [ ] ^ _ ` { | } H I J K L M o ) * S + , N p E T U - V . W ~ q O abr bbcbdbebs fbgbX t hbibu jbkblbmbY v nbobw pbx P Z Q 0 / qby : 1 z A
33 posts_page = posts_query.paginate(page, per_page) 22 R ; 3 4 5 6 = 7 8 9 ! B C F ? b c d G e f g D h i # $ % ' ( j k l m n @ [ ] ^ _ ` { | } H I J K L M o ) * S + , N p E T U - V . W ~ q O abr bbcbdbebs fbgbX t hbibu jbkblbmbY v nbobw pbx P Z Q 0 / qby : 1 z A
35 return posts_page 12R3456789!BCFbcdGefgDhi#$%'(jklmnHIJKLMo)*S+,NpETU-V.WqOrsXtuvwxPZQ0/y:1zA
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() 2rbB C F b c d G e f g D h i j k l m n H I J K L M o N p E q r s t u Y v w x P Q y z A
44 return post, 201 2rbB C F b c d G e f g D h i j k l m n H I J K L M o N p E q r s t u Y v w x P Q y z A
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) 2ubsbvbwbtbC b c d e f g D h i j k l m n I J K M o S p q O r s X t u v w x Z 0 y z A
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) 2R tbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbC F b c d e f g D h i j k l m n o p E T U W q r s t u v w x y z A
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) 2NbB ObPbsbb c d G e f g h i j Qbk l m n H L o N p E V q O r s t u v w x y 1 z A
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__ 2RbB