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

1# Copyright (c) Microsoft Corporation. 

2# Licensed under the MIT License. 

3 

4import logging 1a

5 

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

14 

15log = logging.getLogger(__name__) 1a

16 

17ns = api.namespace('blog/posts', description='Operations related to blog posts') 1a

18 

19 

20@ns.route('') 1a

21class PostsCollection(Resource): 1a

22 

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

34 

35 return posts_page 12R3456789!BCFbcdGefgDhi#$%'(jklmnHIJKLMo)*S+,NpETU-V.WqOrsXtuvwxPZQ0/y:1zA

36 

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

45 

46 

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

51 

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

58 

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

66 

67 @api.response(204, 'Post successfully deleted.') 1a

68 def delete(self, postId): 1a

69 """ 

70 Deletes a blog post with matching \"postId\". 

71 """ 

72 

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

74 

75 

76ns = api.namespace('/', description='Operations related to blog categories') 1a

77@ns.route('/doc') 1a

78class Doc(Resource): 1a

79 

80 def get(self): 1a

81 """ 

82 Returns list of blog categories. 

83 """ 

84 return api.__schema__ 2RbB