Ejemplo n.º 1
0
    def put(self, post_id=None):
        if not post_id:
            return "Відсутній id в url"
        json_data = json.dumps(request.json)
        try:
            try:
                post_data = PostSchema().loads(json_data)
                post_data = json.loads(PostSchema().dumps(post_data))
                post = Post(id=post_id)

                reference_tags_list = post_data['tag']
                tag_list_updated = []
                for tag_str in reference_tags_list:
                    reference_tag = Tag.objects.filter(id=tag_str)
                    tag_list_updated.append(reference_tag[0].id)
                    
                reference_author = Author.objects.filter(id=post_data['author'])

                post.update(id=post_id,
                            body=post_data['body'],
                            title=post_data['title'],
                            author=reference_author[0].id,
                            tag=tag_list_updated)
            except ValidationError as error:
                post_data = error.messages
            return post_data
        except Val_error as error:
            data = "Введений ID у невірному форматі або неіснуючий: " + str(error)
            return data
Ejemplo n.º 2
0
    def post(self, *args):
        json_data = json.dumps(request.json)
        try:
            result = PostSchema().loads(json_data)
            res = json.loads(PostSchema().dumps(result))
            Post.objects.create(**res).save().to_json()

            author = Author.objects.get(id=result['author'])
            author.num_of_publications += 1
            author.save()
        except ValidationError as error:
            res = error.messages
        return res
Ejemplo n.º 3
0
    def get(self, post_id=None):
        if post_id:
            try:
                post = Post.objects.get(id=post_id)
                post.number_of_views += 1
                post.save()

                return PostSchema().dump(post)
            except DoesNotExist as error:
                data = "За введеним ID наразі немає записів (або отриманий запис має посилання на " \
                       "інший неіснуючий): " + str(error)
                return data
            except Val_error as error:
                data = "Введений ID у невірному форматі:" + str(error)
                return jsonify(data)
        else:
            try:
                posts = Post.objects
                return PostSchema().dump(posts, many=True)
            except DoesNotExist as error:
                data = "Один з отриманих записів має посилання на інший неіснуючий: " + str(error)
                return data
Ejemplo n.º 4
0
    def get(self, tag_id=None):
        if tag_id:
            try:
                tag = Tag.objects.get(id=tag_id)
                posts = Post.objects.filter(tag__contains=tag)

                tag = TagSchema().dump(tag)
                posts = PostSchema().dump(posts, many=True)

                data = {'tag': tag, 'posts': posts}
            except DoesNotExist as error:
                data = "За введеним ID наразі немає записів (або отриманий запис має посилання на " \
                       "інший неіснуючий): " + str(error)
            except Val_error as error:
                data = "Введений ID у невірному форматі або неіснуючий: " + str(error)
            return jsonify(data)
        else:
            tags = Tag.objects
            return TagSchema().dump(tags, many=True)
Ejemplo n.º 5
0
    def get(self, author_id=None):
        if author_id:
            try:
                author = Author.objects.get(id=author_id)
                author_posts = Post.objects.filter(author=author_id)

                author = AuthorSchema().dump(author)
                author_posts = PostSchema(exclude=['author']). \
                    dump(author_posts, many=True)

                data = {'author': author, 'posts': author_posts}
                return data
            except DoesNotExist as error:
                data = "За введеним ID наразі немає записів (або отриманий запис має посилання на " \
                       "інший неіснуючий): " + str(error)
                return jsonify(data)
            except Val_error as error:
                data = "Введений ID у невірному форматі:" + str(error)
                return jsonify(data)
        else:
            authors = Author.objects
            return AuthorSchema().dump(authors, many=True)
Ejemplo n.º 6
0
    def delete(self, post_id=None):
        if not post_id:
            return "Відсутній id в url"
        try:
            post_to_delete = Post.objects.get(id=post_id)
            post_to_delete = PostSchema().dump(post_to_delete)

            author_str = post_to_delete['author']
            author_list = author_str.split()
            author = Author.objects.filter(name=author_list[0], surname=author_list[1])[0]
            author = Author.objects.get(id=author.id)
            author.num_of_publications -= 1
            author.save()

            tag = Post(id=post_id)
            tag.delete()
            return post_to_delete
        except DoesNotExist as error:
            data = "За введеним ID наразі немає записів: " + str(error)
            return data
        except Val_error as error:
            data = "Введений ID у невірному форматі: " + str(error)
            return data
Ejemplo n.º 7
0
 def get(self):
     try:
         return jsonResponse({"posts": PostSchema(many=True).dump(Post.query.all())}, 200)
     except Exception as e:
         return jsonResponse({"error": str(e)}, 400)
Ejemplo n.º 8
0
    return new_user


@app.route('/api/v1/users', methods=['GET'])
@login_required
@marshal_with(UserSchema(many=True))
def get_users():
    try:
        users: list = User.query.all()
    except Exception as e:
        return {'message': str(e)}, 400
    return users


@app.route('/api/v1/posts', methods=['GET'])
@marshal_with(PostSchema(many=True))
def get_posts():
    try:
        posts: list = Post.get_posts()
    except Exception as e:
        logger.warning(f'post: - get posts action failed with error: {e}')
        return {'message': str(e)}, 400
    return posts


@app.route('/api/v1/posts', methods=['POST'])
@login_required
@use_kwargs(PostSchema)
@marshal_with(PostSchema)
def add_post(**kwargs):
    try: