def post(self): post_args = self.post_parser.parse_args() channel_name = post_args.get('channel') channel = Channel.query.filter_by(name=channel_name).first() now = datetime.utcnow() tags = post_args.get('tags') or [] if not channel: return jsonify( message='Please choose a channel for publishing.'), 404 try: post = Post() post.name = post_args.get('name') post.channel = channel.name post.content = post_args.get('content') post.publish_time = now post.save() for tag in tags: t = Tag.query.filter_by(name=tag).first() or Tag() t.post_id = post.id t.name = tag t.save() except IntegrityError: db.session.rollback() return jsonify(message='Post {} already exists.'.format( post_args.get('name'))), 409 return jsonify(marshal(post, self.post_fields)), 201