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:34 +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) 1zlbcmqndefghiorstpujvwxk

30 page = args.get('page', 1) 1lbcmqndefghiorstpujvwxk

31 per_page = args.get('per_page', 1) 1lbcmqndefghiorstpujvwxk

32 posts_query = Post.query 1lbcmqndefghiorstpujvwxk

33 posts_page = posts_query.paginate(page, per_page) 1lbcmqndefghiorstpujvwxk

34 

35 return posts_page 1lbcmqdefghiorpjk

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() 1ylbcmndefghijk

44 return post, 201 1ylbcmndefghijk

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) 1ylbcdefghijk

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) 1lbcmdefghij

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) 1ybcmdefghiopjk

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__ 1Ak