Esempio n. 1
0
    def exec_main_proc(self):
        self.__delete_article_content_edit()
        self.__create_article_history_and_update_sort_key()

        article_info_table = self.dynamodb.Table(
            os.environ['ARTICLE_INFO_TABLE_NAME'])
        article_info_before = article_info_table.get_item(
            Key={
                'article_id': self.params['article_id']
            }).get('Item')

        article_info_table.update_item(
            Key={
                'article_id': self.params['article_id'],
            },
            UpdateExpression=
            'set #attr = :article_status, sync_elasticsearch = :one, topic = :topic, tags = :tags',
            ExpressionAttributeNames={'#attr': 'status'},
            ExpressionAttributeValues={
                ':article_status': 'public',
                ':one': 1,
                ':topic': self.params['topic'],
                ':tags': self.params.get('tags')
            })

        try:
            TagUtil.create_and_count(self.dynamodb,
                                     article_info_before.get('tags'),
                                     self.params.get('tags'))
        except Exception as e:
            logging.fatal(e)
            traceback.print_exc()

        return {'statusCode': 200}
    def test_main_with_null_before_tag_names(self):
        before_tag_names = None
        after_tag_names = ['A', 'D', 'E']

        TagUtil.create_and_count(self.dynamodb, before_tag_names,
                                 after_tag_names)

        tag_table = self.dynamodb.Table(os.environ['TAG_TABLE_NAME'])
        tags = tag_table.scan()['Items']

        expected = [
            {
                'name': 'A',
                'count': Decimal('3'),
            },
            {
                'name': 'B',
                'count': Decimal('3'),
            },
            {
                'name': 'D',
                'count': Decimal('1'),
            },
            {
                'name': 'E',
                'count': Decimal('5'),
            },
        ]

        for tag in tags:
            del tag['created_at']

        tags = sorted(tags, key=lambda t: t['name'])

        self.assertEqual(tags, expected)
Esempio n. 3
0
    def exec_main_proc(self):
        article_content_edit_table = self.dynamodb.Table(
            os.environ['ARTICLE_CONTENT_EDIT_TABLE_NAME'])
        article_content_edit = article_content_edit_table.get_item(
            Key={
                'article_id': self.params['article_id']
            }).get('Item')

        article_info_table = self.dynamodb.Table(
            os.environ['ARTICLE_INFO_TABLE_NAME'])
        article_info_before = article_info_table.get_item(
            Key={
                'article_id': self.params['article_id']
            }).get('Item')

        self.__validate_article_content_edit(article_content_edit)

        self.__create_article_history(article_content_edit)
        self.__update_article_info(article_content_edit)
        self.__update_article_content(article_content_edit)

        article_content_edit_table.delete_item(
            Key={'article_id': self.params['article_id']})

        try:
            TagUtil.create_and_count(self.elasticsearch,
                                     article_info_before.get('tags'),
                                     self.params.get('tags'))
        except Exception as e:
            logging.fatal(e)
            traceback.print_exc()

        return {'statusCode': 200}
Esempio n. 4
0
    def exec_main_proc(self):
        # 公開する記事が有料設定か無料設定かの判定
        if self.params.get('price') is not None and self.params.get(
                'paid_body') is not None:
            is_priced = True
        elif self.params.get('price') is None and self.params.get(
                'paid_body') is None:
            is_priced = False
        else:
            raise ValidationError('Both paid body and price are required.')

        # 共通処理
        article_info_table = self.dynamodb.Table(
            os.environ['ARTICLE_INFO_TABLE_NAME'])
        article_info_before = article_info_table.get_item(
            Key={
                'article_id': self.params['article_id']
            }).get('Item')
        article_content_edit_table = self.dynamodb.Table(
            os.environ['ARTICLE_CONTENT_EDIT_TABLE_NAME'])
        article_content_edit = article_content_edit_table.get_item(
            Key={
                'article_id': self.params['article_id']
            }).get('Item')
        article_content_table = self.dynamodb.Table(
            os.environ['ARTICLE_CONTENT_TABLE_NAME'])

        self.__validate_article_content_edit(article_content_edit)

        # 有料記事の場合
        if is_priced:
            self.__create_paid_article_history(article_content_edit)
            self.__update_paid_article_content(article_content_edit)
            self.__update_paid_article_info(article_content_edit,
                                            article_info_table)
        # 無料記事の場合
        else:
            # 有料記事から無料記事にする場合を考慮している
            self.__remove_price_and_paid_body(article_info_table,
                                              article_content_table)
            self.__create_article_history(article_content_edit)
            self.__update_article_content(article_content_edit)
            self.__update_article_info(article_content_edit,
                                       article_info_table)

        article_content_edit_table.delete_item(
            Key={'article_id': self.params['article_id']})

        try:
            TagUtil.create_and_count(self.elasticsearch,
                                     article_info_before.get('tags'),
                                     self.params.get('tags'))
        except Exception as e:
            logging.fatal(e)
            traceback.print_exc()

        return {'statusCode': 200}