Пример #1
0
    def get(self):
        """GET запрос для получения статистики постов.

        Возвращает JSON объект содержащий статистику
        постов и черновиков в БД:

        'categories_count':      int  -  количество категорий
        'comment_count':         int  -  количество комментариев
        'draft_count':           int  -  количество черновиков
        'post_count':            int  -  количество постов
        'total_in_posts_table':  int  -  количество постов + черновиков

        В случае ошибки возвращает сообщение соответствующее
        типу ошибки в виде JSON(в поле 'status' находится сообщение ошибки)
        и соответствующий код.

        Возможные коды ошибок:
        При невозможности подключения к БД - 503

        """

        try:
            statistic = get_statistic()
        except Exception as e:
            response = make_exception_response(str(e))
            return response

        return jsonify(statistic)
Пример #2
0
    def get(self):
        """GET запрос для получения всех существующих категорий.

        Возвращает JSON объект содержащий все категории из БД.
        Каждая категория имеет вид определённый в методе `to_dict`
        класса `Category` в blog/models.py:

        'id':    int  -  id категории
        'name':  str  -  название категории
        'tag':   str  -  тэг категории

        В случае ошибки возвращает сообщение соответствующее
        типу ошибки в виде JSON(в поле 'status' находится сообщение ошибки)
        и соответствующий код.

        Возможные коды ошибок:
        При невозможности подключения к БД - 503

        """

        result = []

        try:
            categories = get_all_categories()

            for category in categories:
                result.append(category.to_dict())

        except Exception as e:
            response = make_exception_response(str(e))
            return response

        return jsonify(result)
Пример #3
0
    def get(self):
        """GET запрос для получения всех постов.

        Возвращает JSON объект содержащий все посты из БД.
        Каждый пост имеет вид определённый в методе `to_dict`
        класса `Post` в blog/models.py:

        'id':       int  -  id поста
        'user_id':  int  -  id пользователя создавшего пост
        'title':    str  -  заголовок поста
        'body':     str  -  текст поста
        'tag':      str  -  тэг категории поста

        В случае ошибки возвращает сообщение соответствующее
        типу ошибки в виде JSON(в поле 'status' находится сообщение ошибки)
        и соответствующий код.

        Возможные коды ошибок:
        При невозможности подключения к БД - 503

        """

        try:
            posts = get_all_posts()

        except Exception as e:
            response = make_exception_response(str(e))
            return response

        result = []
        for post in posts:
            result.append(post.to_dict())
        return jsonify(result)
Пример #4
0
    def put(self):
        """PUT запрос для добавления/редактирования тэга поста.

        Принимает JSON с информацией для замены тэга:

        'post_id':  int  -  id поста для которого будет происходить смена тэга
        'tag':      str  -  новый тэг поста(при отсутствии - удаление тэга у поста)


        В случае ошибки возвращает сообщение соответствующее
        типу ошибки в виде JSON(в поле 'status' находится сообщение ошибки)
        и соответствующий код.

        Возможные коды ошибок:
        При ошибке записи - 409
        При невозможности подключения к БД - 503

        """

        parser = reqparse.RequestParser()
        parser.add_argument('post_id')
        parser.add_argument('tag')

        args = parser.parse_args()

        try:
            change_post_tag(post_id=args['post_id'],
                            tag=args['tag'])

        except Exception as e:
            response = make_exception_response(str(e))
            return response

        return Response(status=201)
Пример #5
0
    def post(self):
        """POST запрос для добавления поста/черновика.

        Принимает JSON с информацией для создания поста:

        'user_id':   int   -  id пользователя создающего пост
        'title':     str   -  заголовок поста*
        'text':      str   -  текст поста**
        'is_draft':  bool  -  пометка "создать как черновик"(опционально)
        'tag':       str   -  тэг категории поста(опционально)

        * & ** имеют ограничения максимального количества символов.
        Информация находится в классе Config в config.py.

        В случае ошибки возвращает сообщение соответствующее
        типу ошибки в виде JSON(в поле 'status' находится сообщение ошибки)
        и соответствующий код.

        Возможные коды ошибок:
        При ошибке записи - 409
        При невозможности подключения к БД - 503

        """

        parser = reqparse.RequestParser()
        parser.add_argument('user_id')
        parser.add_argument('title')
        parser.add_argument('text')
        parser.add_argument('is_draft')
        parser.add_argument('tag')

        args = parser.parse_args()

        is_draft = False

        # Проверка входящего значения is_draft(пометка "черновик")
        # для корректной обработки строк.
        if args['is_draft'] and args['is_draft'].lower() == 'true':
            is_draft = True

        try:
            add_post(user_id=args['user_id'],
                     title=args['title'],
                     body=args['text'],
                     is_draft=is_draft,
                     tag=args['tag'])

        except Exception as e:
            response = make_exception_response(str(e))
            return response

        return Response(status=201)
Пример #6
0
    def get(self):
        """GET запрос для получения всех комментариев поста.

        Принимает JSON с id поста для которого
        необходимо найти комментарии:

        'post_id':  int  -  id поста для которого необходимо найти комментарии

        Возвращает JSON объект содержащий все комментарии из БД,
        которые адресованы посту с id из запроса.
        Каждый комментарий имеет вид определённый в методе `to_dict`
        класса `Comment` в blog/models.py:

        'id':       int  -  id комментария
        'post_id':  int  -  id поста для которого написан комментарий
        'email':    str  -  email оставившего комментарий
        'name':     str  -  имя оставившего комментарий
        'body':     str  -  текст комментария

        В случае ошибки возвращает сообщение соответствующее
        типу ошибки в виде JSON(в поле 'status' находится сообщение ошибки)
        и соответствующий код.

        Возможные коды ошибок:
        При отсутствии поста, для которого необходимо получить комментарии - 409
        При невозможности подключения к БД - 503

        """

        parser = reqparse.RequestParser()
        parser.add_argument('post_id')
        args = parser.parse_args()

        post_id = args['post_id']

        try:
            comments = get_all_comments_for_post(post_id=post_id)

        except Exception as e:
            response = make_exception_response(str(e))
            return response

        result = []
        for comment in comments:
            result.append(comment.to_dict())

        return jsonify(result)
Пример #7
0
    def post(self):
        """POST запрос для добавления комментария к посту.

        Принимает JSON с информацией для создания комментария:

        'post_id':  int  -  id поста для которого создаётся комментарий
        'email':    str  -  email оставляющего комментарий
        'name':     str  -  имя оставляющего комментарий
        'text':     str  -  текс комментария

        В случае ошибки возвращает сообщение соответствующее
        типу ошибки в виде JSON(в поле 'status' находится сообщение ошибки)
        и соответствующий код.

        Возможные коды ошибок:
        При ошибке записи - 409
        При невозможности подключения к БД - 503

        """

        parser = reqparse.RequestParser()
        parser.add_argument('post_id')
        parser.add_argument('email')
        parser.add_argument('name')
        parser.add_argument('text')

        args = parser.parse_args()

        try:
            add_comment(post_id=args['post_id'],
                        email=args['email'],
                        name=args['name'],
                        body=args['text'])

        except Exception as e:
            response = make_exception_response(str(e))
            return response

        return Response(status=201)
Пример #8
0
    def delete(self):
        """DELETE запрос для удаления постов.

        Принимает JSON с id постов, которые необходимо удалить:

        'posts_id':  int  -  id постов для удаления.

        Возможно удаление одного или нескольких постов.
        Для удаления нескольких постов - в posts_id необходимо
        передать строку с перечислением id постов разделённых с помощью ','
        ('posts_id': '34,45,67,89,2').

        В случае ошибки возвращает сообщение соответствующее
        типу ошибки в виде JSON(в поле 'status' находится сообщение ошибки)
        и соответствующий код.

        Возможные коды ошибок:
        При невозможности подключения к БД - 503

        """

        parser = reqparse.RequestParser()
        parser.add_argument('posts_id')
        args = parser.parse_args()

        try:
            try:
                separated_posts_id = args['posts_id'].replace(' ', '').split(',')
            except Exception:
                raise Exception('Проверьте корректность параметра posts_id')

            delete_posts(*separated_posts_id)

        except Exception as e:
            response = make_exception_response(str(e))
            return response

        return Response(status=200)
Пример #9
0
    def put(self):
        """PUT запрос для изменения категории.

        Принимает JSON с информацией для изменения категории:

        'category_id':  int  -  id категории, которую необходимо изменить
        'name':         str  -  опциональный параметр - новое название категории
        'tag':          str  -  опциональный параметр - новый тэг категории

        В случае ошибки возвращает сообщение соответствующее
        типу ошибки в виде JSON(в поле 'status' находится сообщение ошибки)
        и соответствующий код.

        Возможные коды ошибок:
        При ошибке записи - 409
        При невозможности подключения к БД - 503

        """

        parser = reqparse.RequestParser()
        parser.add_argument('category_id')
        parser.add_argument('name')
        parser.add_argument('tag')
        args = parser.parse_args()

        try:

            change_category(category_id=args['category_id'],
                            name=args['name'],
                            tag=args['tag'])

        except Exception as e:
            response = make_exception_response(str(e))
            return response

        return Response(status=201)