def post_get_content(id): """ Retrieves/sets post content Returns post data in its native XHTML format, or 404 if post not found GET: Retrieve the content PUT: Updates content """ from ghostwriter.Post import Post, PostManager pm = PostManager() post = pm.getPostbyID(id) if post is None: return '', 404 if request.method == 'GET': return post.getContent() if request.method == 'PUT': if not current_user.is_authenticated: return login_manager.unauthorized() post.setContent(request.form['content']) pm.updatePostContent(post) return '', 200
def posts_search(userid=None): """ Search for posts, by date or title """ vsearch = {} title = request.args.get('title') if not (title is None): vsearch['title'] = title cdate = request.args.get('cdate') if not (cdate is None): vsearch['creation_date'] = cdate from ghostwriter.Post import Post, PostManager pm = PostManager() posts = pm.filterPosts(**vsearch) if posts is None: return jsonify({'error', 'No filter specified' }), 404 # TODO: think of a better error code if len(posts) <= 0: return jsonify({'error': 'No posts found'}), 404 return jsonify(post_array_to_dictionary(posts))
def create_post(self, title, body, author, cdate=None): from ghostwriter.Post import Post, PostManager po = Post(author.uid, title, cdate) po.setContent(body) pm = PostManager() pm.addPost(po)
def posts_get(): """ Gets all posts Returns a JSON with their information, without content data """ from ghostwriter.Post import Post, PostManager pm = PostManager() posts = pm.getAllPosts() if len(posts) <= 0: return jsonify({'error': 'No posts found'}), 404 return jsonify(post_array_to_dictionary(posts))
def posts_author_search(userid): """ Search for posts, by author """ from ghostwriter.Post import Post, PostManager pm = PostManager() posts = pm.filterPosts(author_id=userid) if len(posts) <= 0: return jsonify({'error': 'No posts found'}), 404 return jsonify(post_array_to_dictionary(posts))
def test_delete_blog_post(self): self.authenticate() from ghostwriter.Post import Post, PostManager from flask import json p = Post(1, 'Get Content Test') p.setContent('Post content') pm = PostManager() pm.addPost(p) res = self.app.delete('/api/post/' + str(p.ID) + '/', follow_redirects=True) self.assertEqual(res.status, '200 OK') res = self.app.delete('/api/post/' + str(p.ID) + '/', follow_redirects=True) self.assertEqual(res.status, '404 NOT FOUND')
def test_get_content(self): self.authenticate() from ghostwriter.Post import Post, PostManager from flask import json p = Post(1, 'Get Content Test') p.setContent('Post content') pm = PostManager() pm.addPost(p) res = self.app.get('/api/post/' + str(p.ID) + '/content', follow_redirects=True) self.assertEqual(res.status, '200 OK') post_data = res.data self.assertEqual(b'Post content', post_data) self.deauthenticate()
def post_create(): """ Creates post Returns post metadata, with ID """ from ghostwriter.Post import Post, PostManager pm = PostManager() post = Post(current_user.uid, request.form['title']) pm.addPost(post) jdata = { 'id': post.ID, 'title': post.title, 'creation_date': post.creation_date.isoformat(), 'summary': post.getSummary(), 'owner': { 'id': post.getOwner().uid, 'name': post.getOwner().name } } return jsonify(jdata), 200
def test_set_and_get_metadata(self): self.authenticate() from ghostwriter.Post import Post, PostManager from flask import json p = Post(1, 'Get Meta Test') p.setContent('Post content') pm = PostManager() pm.addPost(p) res = self.app.put('/api/post/' + str(p.ID) + '/', data={'title': 'New Meta Test'}, follow_redirects=True) self.assertEqual(res.status, '200 OK') res = self.app.get('/api/post/' + str(p.ID) + '/', follow_redirects=True) self.assertEqual(res.status, '200 OK') post_data = json.loads(res.data) self.assertEqual('New Meta Test', post_data['title']) self.deauthenticate()
def post_get(id): """ Manage the post If post not found, give a 404 Not Found error GET: Retrieve post metadata, in JSON format PUT: Update any field of post metadata. Return it in JSON format DELETE: Delete the post """ from ghostwriter.Post import Post, PostManager pm = PostManager() post = pm.getPostbyID(id) if post is None: return jsonify({'error': 'The post could not be found'}), 404 if request.method == 'GET': jdata = { 'id': post.ID, 'title': post.title, 'creation_date': post.creation_date.isoformat(), 'summary': post.getSummary(), 'owner': { 'id': post.getOwner().uid, 'name': post.getOwner().name } } return jsonify(jdata), 200 elif request.method == 'DELETE': #TODO: check parmissions if current_user.uid != post.getOwner().uid: return jsonify({'error': 'Not authorized to delete the pos'}), 401 pm.removePost(post) return "", 200 elif request.method == 'PUT': title = request.form['title'] post.title = title pm.updatePostMetadata(post) jdata = { 'id': post.ID, 'title': post.title, 'creation_date': post.creation_date.isoformat(), 'summary': post.getSummary(), 'owner': { 'id': post.getOwner().uid, 'name': post.getOwner().name } } return jsonify(jdata), 200 else: return "", 405
def posts_author_search_filter(userid): """ Search for posts, by author """ vsearch = {} title = request.args.get('title') if not (title is None): vsearch['title'] = title cdate = request.args.get('cdate') if not (cdate is None): vsearch['creation_date'] = cdate vsearch['author_id'] = userid from ghostwriter.Post import Post, PostManager pm = PostManager() posts = pm.filterPosts(**vsearch) if len(posts) <= 0: return jsonify({'error': 'No posts found'}), 404 return jsonify(post_array_to_dictionary(posts))